Лидеры
Популярный контент
Показан контент с высокой репутацией 25.07.2024 в Сообщения
-
1 балл
-
1 балл
-
1 балл@Boralgin нужно сравнивать нулёвку и 12 строку, название должно быть одинаковое, кроме двух первых символов 12 и 0В. Если название строки автор поменял, а у перевода осталось старое название, то он читаться не будет Чтобы всё не переделывать, нужно просто копировать название с нулёвки и вставить в название 12 строки, кроме первых двух символов Вообще желательно делать отдельный файл пэкедж с переводом, если делать перевод сразу в файле с модом, то при обнове его опять переделывать Чуть позже напишу как сравнивать строки и совмещать старый перевод и новые строки
-
1 баллВерсия 0.3 Данный урок рассчитан на самый низкий уровень знаний поэтому если вы совсем новичок - не пугайтесь, читайте и творите самостоятельно. Цель урока: Подключить sexlab framework, и написать простой мод с его использованием. План работы для нашего будущего мода: [*] создать npc [*] добавить диалог к нашему npc [*] через диалог вызвать анимации секса используя sexlab. Подготовительная работа: Если у вас еще не установлен sexlab: Скачиваем sexlab с [Скрытое содержимое] внизу нулевого сообщения в теме "Skyrim SexLab - Sex Animation Framework версия такая то" переходим по Click here to download this file жмем еще раз Download и выбираем последнюю версию. Если вы еще не настроили creation kit для работы с несколькими мастер файлами: в папке с игрой открываем SkyrimEditor.ini после [General] добавляем строку bAllowMultipleMasterLoads=1 Если вы еще не зарегистрировали flowchartx32.dll: - запускаем cmd.exe от имени администратора. - вводим cd path где вместо path пишем путь до вашей папки со скайримом например: C:\Program Files (x86)\Steam\SteamApps\common\skyrim в итоге должно получится cd C:\Program Files (x86)\Steam\SteamApps\common\skyrim - далее вводим regsvr32 flowchartx32.dll, после чего должно появится сообщение что библиотека успешна зарегистрирована. Если вы еще не ставили SkyUI SDK и понятия не имеете что это и зачем: идем на [Скрытое содержимое] качаем оттуда версию 3.4, но можете и последнюю ) кидаем в папку data/scripts/source с игрой скрипты из одноименной папки в архиве. Если ваш Creation Kit отображает игровые диалоги на английском, но в игре то у вас они на русском: в папке с игрой открываем SkyrimEditor.ini ищем параметр sLanguage и ставим RUSSIAN если такого параметра нет, то после [General] добавляем строку sLanguage=RUSSIAN Создаем наш мод: 1. запускаем CreationKit.exe 2. File->Data: выбираем Skyrim.esm и SexLab.esm жмем ok. Игнорируем все ошибки тыкая ok, в дальнейшем можно сделать чтобы редактор игнорировал подобные ошибки автоматом через опции в SkyrimEditor.ini 3. В Object Window->Actor->New: в поле ID пишем уникальный ID нашего npc, на будущее в ID в своем моде лучше начинать с определенного префикса, нужно это для того чтобы было потом проще искать среди остальных ресурсов не принадлежащему нашему моду (введя префикс в строке Filter). Назначим ID: gsTSL_WhiterunMaleNPC01 в поле Name задаем полное имя которое будет видно в игре, например "Джон Сорвиголова". в поле Short Name прозвище/кличку/короткий вариант, в моем случае "Джон" в template data->actor base выберем шаблон на котором будет основан наш персонаж, открываем список жмем кнопку "N" на кливе и выбираем NordMalePreset01 в Traits->Race: NordRace Voice Type: MaleNord Inventory->Default Outfit: FarmClothesOutfit3 После чего жмем ok, в дальнейшем вы можете отредактировать созданного npc как душе угодно, почитав более подробные уроки по созданию npc. 4. В окне Cell View->World Space выберем "Whiterun World" затем ниже в левой части окна "WhiterunOrigin" в правой "Dragon Market" к примеру и далее в основном окне поищем место для нашего npc которое устроит вас, (для вращения камеры удерживаем shift, для перемещения зажимаем среднюю кнопку, приблизить/отдалить колесо мыши). После того как определились с местом перетаскиваем нашего npc из Object Window. 5. Далее создадим Квест, не пугайтесь если вы не имели до этого дела с диалогами в creation kit'e, все они создаются через квесты. Object Window->Character->Quest->New Вкладка Quest Data: ID: gsTSL_QuestDialogue1 Quest Name: Знакомство в Вайтране Priority: 60 Event: None Start Game Enabled: да Run Once: нет Вкладка Quest Stages: В левой части окна создаем этапы квеста, клик правой кнопкой мыши -> New указываем index 0, 10, 20 и т.д. в зависимости от того сколько вы захотите создать этапов. для нулевого выставляем Start Up Stage (начальный этап), жмем ok. Открываем снова наш квест, теперь будет доступно больше вкладок. Переходим на вкладку Dialogue views. В левой части окна пкм по списку -> new пишем название диалога "gsTSL_QuestDialogue1MaleDlg", выбираем его и в основной части окна (область справа) пкм create branch (создать ветку диалога), в появившемся окне вводим название "gsTSL_QuestDialogue1MaleDlgBranch". В результате у нас появится "форма" с пустым диалогом, дважды кликаем по светло оранжевой области, появится окно "Topic": Subtype: Custom (обычный), ForceGreet (форсированное приветствие), Rumors (слухи) оставляем Custom. Topic Text: Название нашего топика, в игре не отображается пишем например: gsTSL_MaleDlgBranchTopic Ниже пкм по таблице->new в появившемся окне: Response Text: "А я что-то не вижу на тебе формы стражи, проваливай!" Idle Animations: IdleExamine (во время ответа npc будет изучающее на вас смотреть) EmotionType: Anger (гневное выражение лица) Emotion value: 75 (насколько выразительна эмоция) Жмем ok, появится след. окно "Topic Info": Promt: фраза на которую отвечает Npc "Что-то я не видел тебя тут раньше, ты откуда взялся?" отмечаем Force Subtitle (форсировать субтитры) в таблице под слово Conditions: (условия) задаем условия при котором данный диалог будет появляться: пкм->new: Condition Function (Функция для условия): GetIsID (возвращает ID) Жмем на соседнюю кнопку "INVALID" (недействительный) и выбираем в списке ID нашего npc "gsTSL_WhiterunMaleNPC01" дабы не искать в этом огромном списке нажмите просто gs убедившись перед этим что стоит англ. раскладка. Comparison: (сравнение) оставляем знак == (равно) Value: (значение) 1.0 Run on: "использовать по отношению к" Subject (к причине темы, а именно к говорящему) Жмем ok, тем самым мы создаем условие следующего вида: "Говорящий должен быть Джон Сорвиголова" Создаем еще условие аналогичным образом: Condition Function: GetPCIsSex (возвращает пол игрока) оставляем Male (мужской) остальные настройки нас тоже устраивают, жмем ок. Как несложно догадаться новое условие "Игрок должен быть мужского пола". В итоге у нас есть два условия при срабатывании ТОЛЬКО обоих наш диалог отобразится. Далее в правой части окна под надписью Link to: (связать с...) пкм -> Add Link в появившемся окне: пкм по таблице -> new пишем gsTSL_QuestDialogue1Aggro, повторяем процедуру вводя gsTSL_QuestDialogue1Danger, gsTSL_QuestDialogue1Peace, gsTSL_QuestDialogue1Ignore после чего зажав control выбираем их по порядку начиная с gsTSL_QuestDialogue1Aggro и жмем ок. Тем самым мы создали заготовки для продолжения нашего диалога. Жмем ok ok ok закрывая все наши окна, сохраняем проект назвав по своему усмотрению, у меня "gsTSL_Whiterun" creation kit капризная штука и при работе с диалогами не редки его падения с ошибками, сохраняйтесь почаще. В Object Window выбираем наш квест -> edit -> вкладка Dialogue View, тут у нас уже куча стрелок, упорядочим блоки, разместив их как вам удобно, главное видеть их всех имея к ним прямой доступ. Открывааем каждый из них двойным кликом по заголовку либо пкм -> edit topic, тут уже все нам более менее знакомо поэтому очень кратко: gsTSL_QuestDialogue1Aggro: Promt: "Ты сам напросился..." Response Text: "Драки хочешь? Ты ее получишь!" отмечаем, ForceSubtitle и Goodbye. В Scripts -> End пишем: akSpeaker.StartCombat(akSpeaker.GetDialogueTarget())жмем compile, затем переходим на вкладку Advanced -> Rename Script -> вводим gsTSL_RunAttackByDlgScript, для верности еще раз compile. gsTSL_QuestDialogue1Danger: Promt: "Хо-хо, а ты дерзкий малый, посмотрим что ты скажешь когда я приду со стражей." Response Text: "Тише тише, я пошутил, держи лучше вот... и забудь про стражу." отмечаем, ForceSubtitle и Goodbye. В Scripts -> End пишем: ;compile, advanced-> rename script -> "gsTSL_AddGoldByDlgScript" -> ok правее под Script Name: выбираем наш скрипт жмем properties->add property: Type: MiscObject Name: Gold ok выделаем созданную property -> edit value -> Gold001 ->ok изменяем наш скрипт: akSpeaker.GetDialogueTarget().AddItem(Gold, 100)compile. Данным скриптом мы даем шантажисту 100 монет. gsTSL_QuestDialogue1Peace: Promt: "Да ладно остынь приятель, давай лучше по одной." Response Text: "Так бы сразу, а то откуда я взялся... ух, хорошо пошла." отмечаем, ForceSubtitle и Goodbye. Conditions -> new: Run on: Target (по отношению к собеседнику (игроку)) Condition Function: GetItemCount (вернуть кол-во предметов) INVALID-> AlcholicDrinksList Comparison: >= (Больше или равно) Value: 2.0 данная ветка диалога будет доступна если у игрока есть что-нибудь алкогольного в кол-ве 2 штук или более. а теперь напишем скрипт который передаст бутылку Джону и заставит выпить его и героя: для начала снова создадим пустой скрипт с одним комментарием, делаем это для того чтобы создать скрипт и работать с ним дальше. ;compile, advanced->rename... -> "gsTSL_GiveItemAndUseByDlgScript" добавляем property: Type: FormList Name: AlcoholicDrinks ok->Edit Value -> AlcholicDrinksList изменяем наш скрипт: ; akListener собеседник говорящего (игрок)Actor akListener = akSpeaker.GetDialogueTarget(); кол-во найденного алкоголяint cur_count = 0; сколько всего наименований алкоголя существует в игреint form_size = AlcoholicDrinks.GetSize(); напоили ли мы уже говорящегоbool isSpeakerDrinked = false; пробегаемся по всем наименованиям алкоголяwhile (form_size > 0) form_size -= 1; получаем конкретное наименование алкоголя Form item_form = AlcoholicDrinks.getAt(form_size); смотрим сколько есть с таким наименованием cur_count += akListener.GetItemCount(item_form) ; если что-то есть и говорящий еще трезв, даем ему и спаиваем if(cur_count > 0 && !isSpeakerDrinked) akListener.RemoveItem(item_form, 1) akSpeaker.AddItem(item_form, 1) akSpeaker.EquipItem(item_form) cur_count -= 1 isSpeakerDrinked = true endif ; если нашли еще бутылку, пьем сами if(cur_count > 0) akListener.EquipItem(item_form); завершаем принудительно цикл form_size = 0 endifendWhilecompile. gsTSL_QuestDialogue1Ignore: Promt: "*Оставить его в покое*" Response Text: "Ходят тут всякие..." отмечаем, ForceSubtitle и Goodbye. Итоговая версия мужской ветки диалога: - Что-то я не видел тебя тут раньше, ты откуда взялся? - А я что-то не вижу на тебе формы стражи, проваливай! - Ты сам напросился... - Драки хочешь? Ты ее получишь! - Хо-хо, а ты дерзкий малый, посмотрим что ты скажешь когда я приду со стражей. - Тише тише, я пошутил, держи лучше вот... и забудь про стражу. - Да ладно остынь приятель, давай лучше по одной. - Так бы сразу, а то откуда я взялся... ух, хорошо пошла. - *Оставить его в покое* - Ходят тут всякие... Итак мы научились создавать диалоги выполняющиеся по следующему сценарию: 1) игрок активирует npc 2) игрок выбирает возможный вариант ответа 3) npc отвечает игроку 4) если фраза не финальная переходим к пункту 2 Из таких диалогов состоит большая часть игры, но есть и еще другой сценарий ведения диалога: 1) npc окликивает игрока 2) начинает разговор 3) игрок выбирает возможные варианты ответа 4) npc отвечает игроку 5) если фраза не финальная переходим к пункту 3 Причем разговор может прекратиться еще на пункте 2, если npc не желает вас слушать, а лишь хочет вам что- то сказать. Так как основная цель у нас обучение я не буду особо думать над сюжетной составляющией диалога женской ветки и сделаем все просто, если жгг проходит мимо npc то он ее окликает и предлагает заняться сексом, на что жгг соглашается/отказывается, при обоих вариантах даем npc знать что бы больше он игрока недокучал в ближайшие несколько часов. Открываем наш квест, переходим на вкладку Dialogue Views, под уже созданной мужской веткой диалога создаем новую, называем: gsTSL_QuestDialogue1FemaleDlg создаем ветку диалога: gsTSL_QuestDialogue1FemaleDlgBranch и сотвественно сразу же топик: gsTSL_QuestDialogue1FemaleDlgBranchTopic Topic Text оставляем пустым. Под info создаем "ответ" npc: Response Text: - Эй красавица! Давай по быстрому перепихнемся... жмем ok, настраиваем как обычно условия: в поле Hours until reset пишем: 1.0 этим мы указываем что диалог не будет появляться в течении часа. Добавляем варианты ответов, создавая линки на заготовки топиков: gsTSL_QuestDialogue1FemaleAcceptSex gsTSL_QuestDialogue1FemaleRefuseSex Accept - принять, Refuse - отклонить соотвественно. Ставим галочку в опции Walk Away и выбираем: gsTSL_QuestDialogue1FemaleRefuseSex тем самым если игрок не выбрав ответа "закроет" диалог, то npc будт считать что был выбран топик отказа. Жмем, ок, после чего приступаем к редактированию созданных топиков: gsTSL_QuestDialogue1FemaleAcceptSex: Topic Text: - Sexlab тестишь да? Ну ладно давай помогу. Создаем ответ, Response Text: - Как ты догадалась? Хотя не бери в голову... [начинает раздеваться] отмечаем Goodbye и Force Subtitle. В секции Script begin создаем скрипт, переименовываем в: gsTSL_DlgFemaleAcceptSexScript пишем: ; создаем строку вида "<Имя npc> уставился на <имя игрока>"String comment_01 = akSpeaker.GetBaseObject().getName() + " looking at " + Game.GetPlayer().GetBaseObject().getName(); выводим полученную строку в левом верхнем углу экранаDebug.Notification( comment_01 ); заставляем npc смотреть на игрокаakSpeaker.SetLookAt(Game.GetPlayer())compile выделяем скрипт -> properties -> add property: Type: SexLabFramework Name: SexLab не пытайтесь в поле Type найти в списке SexLabFramework, пишите вручную. жмем, ок, выбираем созданную property -> edit -> SexLabSystem -> ok в секции End пишем: ; переводим камеру в вид от третьего лицаGame.ForceThirdPerson(); массив актеровactor[] sexActors = new actor[2]; устанавливаем ж актераsexActors[0] = Game.GetPlayer(); устанавливаем м актераsexActors[1] = akSpeaker; создаем строку "<имя npc> уломал <имя игрока> заняться сексом"String comment_02 = sexActors[1].GetBaseObject().getName()comment_02 += " persuaded " + sexActors[0].GetBaseObject().getName() + " for sex"; выводим ееDebug.Notification( comment_02 ); если актеры валидныif(sexActors[0] && sexActors[1]) ; создаем пустую анимацию, пусть SexLab сам гадает какую проиграть sslBaseAnimation[] anims ; запускаем анимацию SexLab.StartSex(sexActors, anims)endifcompile gsTSL_QuestDialogue1FemaleRefuseSex: что тут написать решите уже сами ) И осталось самое простое, настроить мозги нашему npc: открываем окно Actor с нашим npc переходим на вкладку AI Packages -> по табличке пкм: ID: gsTSL_ForceGreetingPack Package Type: Package Package Template: ForceGreat после чего у нас появится кучка параметров которые и заполняем: Topic->Topic Value: gsTSL_QuestDialogue1FemaleDlgBranchTopic Npc Wait Location-> Radius: ставим радиус в пределах которого актер будет бродить в ожидании обнаружения игрока, тут же можете и настроить где собственно он должен быть. Trigger Location: место где сработает диалог, и радиус. ForceGreat distance: растояние на котором npc завидев начнет нестись к вам на всех порах. Player must be detected: ставим да если хотим иметь возможность ускользнуть от диалога скрываясь. Greet Using Preffered path: добираться до игрока используя предпочтительный путь. Forсegreet if player on horseback: ставим да если хотим чтобы npc начинал разговор даже не смотря на то что вы вверхом. Sandbox while waiting: дать npc жить своей жизнью пока он ждет. А дальше идут параметры уточняющие что ему можно делать в этом случае, кушать, спать и т.д. жмем ок, сохраняемся, тестим мод и начинаем создавать что-нибудь свое. версия 0.3 для тех у кого что-то не получается, можно подсмотреть: gsTSL_Whiterun_0.3.zip
-
Новостная рассылка