Перейти к содержимому


Фотография

Вопросы по скриптам

papyrus help скрипты вопросы

  • Авторизуйтесь для ответа в теме

#641 Ссылка на это сообщение Potatoider

Potatoider
  • Знаменитый оратор


  • 4 350 сообщений
  •    

Отправлено

Тема для вопросов по скриптингу.

Функции папируса:

На английском

На русском (не все, но базис)



 




  • Авторизуйтесь для ответа в теме
Сообщений в теме: 832

#642 Ссылка на это сообщение Enush

Enush
  • Новенький
  • 24 сообщений

Отправлено

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

Так бы и делал, проблема в том что сами примеры совершенно другие, следовательно и скрипты не такие как мне нужно. По поводу моментального респавна уже не важно, главное что бы появилось содержимое. Скрипты эти конечно... это тебе не озвучки в неписях ломать что бы напарников делать  :)

 

P.S. Теперь правильно?

Scriptname ScriptAlchemyCommon extends ObjectReference

 

Event OnActivate(ObjectReference akActionRef)
      self.Reset()
EndEvent


Сообщение отредактировал Enush: 17 июля 2020 - 10:47


#643 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 034 сообщений
  •    

Отправлено

Как бы и делал, проблема в том что сами примеры совершенно другие, следовательно и скрипты не такие как мне нужно.

Так в уроках тебя общим принципам учат. Что, как, куда. А дальше ты уже по этим принципам сам свое пишешь, руководствуясь списком доступных функций и прочих штук.

Вот три основных страницы, в которых есть прям почти все, что надо.

https://www.creation...:Script_Objects

https://www.creation...php?title=Event

https://www.creation...yword_Reference

 

Теперь правильно?

Ну, типа того, да.



#644 Ссылка на это сообщение Enush

Enush
  • Новенький
  • 24 сообщений

Отправлено

Благодарю за подробное толкование скриптинга так такового. Я знаю что это самый банальный и лёгкий вариант, который только можно придумать, но я в этом вообще ни разу не разбирался до этого, и, наверное уже не стану, ибо то чего я хотел получить я и получил. Что касается моей сумки то всё работает безотказно, единственное что я забыл убрать модуль на рандомные зелья каждый определённый уровень, уже исправил, в сумке только три моих ингридиента для яда, которые обновляются каждый раз при открытии контейнера. Ещё раз большое спасибо.



#645 Ссылка на это сообщение Antares669

Antares669
  • Новенький
  • 15 сообщений
  •  

Отправлено

Скрипт из квеста про амулет Бенду,что добавляется убив вора(событие срабатывает при попадании предмета в инвентарь в количестве 1 шт)Как изменить скрипт ,чтоб он переводил на 30 стадию с Проверкой что у игрока есть 2 амулета и только после этой проверки осуществил переход на 30 стадию ,если же у игрока 1 амулет или не одного чтоб оставался так и на 20 стадии.Ниже тело скрипта

 

Event OnContainerChanged(ObjectReference newContainer, ObjectReference oldContainer)
if (newContainer == Game.GetPlayer())
                GSQ01.SetObjectivedisplayed(30)
  GSQ01.SetStage(30)
endif
EndEvent



#646 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 034 сообщений
  •    

Отправлено

Скрипт из квеста про амулет Бенду,что добавляется убив вора(событие срабатывает при попадании предмета в инвентарь в количестве 1 шт)Как изменить скрипт ,чтоб он переводил на 30 стадию с Проверкой что у игрока есть 2 амулета и только после этой проверки осуществил переход на 30 стадию ,если же у игрока 1 амулет или не одного чтоб оставался так и на 20 стадии.Ниже тело скрипта

 

Event OnContainerChanged(ObjectReference newContainer, ObjectReference oldContainer)
if (newContainer == Game.GetPlayer())
                GSQ01.SetObjectivedisplayed(30)
  GSQ01.SetStage(30)
endif
EndEvent

Добавь еще одно условие if

типа такого:

Event OnContainerChanged(ObjectReference newContainer, ObjectReference oldContainer)
if (newContainer == Game.GetPlayer())
   if (Game.GetPlayer().GetItemCount(SuperSecretAmulet)>= 1)
      GSQ01.SetObjectivedisplayed(30)
      GSQ01.SetStage(30)
   endif
endif
EndEvent

Только не забудь этот SuperSecretAmulet в список property добавить, и задать, что это за амулет такой.

Цепляешь этот скрипт к двум разным амулетам, каждому определяешь в проперти другой амулет. Сработает только если оба амулета окажутся в инвентаре одновременно.

Это если амулеты разные.

Если одинаковые (один и тот же предмет в количестве двух, типа обычного золотого амулета) - то просто исправь циферку в скрипте с 1 на 2.



#647 Ссылка на это сообщение Antares669

Antares669
  • Новенький
  • 15 сообщений
  •  

Отправлено

Добавь еще одно условие if

типа такого:

Event OnContainerChanged(ObjectReference newContainer, ObjectReference oldContainer)
if (newContainer == Game.GetPlayer())
   if (Game.GetPlayer().GetItemCount(SuperSecretAmulet)>= 1)
      GSQ01.SetObjectivedisplayed(30)
      GSQ01.SetStage(30)
   endif
endif
EndEvent

Только не забудь этот SuperSecretAmulet в список property добавить, и задать, что это за амулет такой.

Цепляешь этот скрипт к двум разным амулетам, каждому определяешь в проперти другой амулет. Сработает только если оба амулета окажутся в инвентаре одновременно.

Это если амулеты разные.

Если одинаковые (один и тот же предмет в количестве двух, типа обычного золотого амулета) - то просто исправь циферку в скрипте с 1 на 2.

Спасибо вам за грамотные советы!Хотя в вашем скрипте и ошибочка не компилируется так как выводит -Двойное условие...Вот когда одно удалить ,то все начинает компилироваться,но что интересно при попадании из кузни в инвентарь пишет сразу же на первой броньке что выкованны 2 шт.Хотя и прописал как вы советовали ввел вот это на предмете

Event OnContainerChanged(ObjectReference newContainer, ObjectReference oldContainer)

if (newContainer == Game.GetPlayer())
   (Game.GetPlayer().GetItemCount(PirateArmor)>= 2)
      ReturnQeenPotema.SetObjectivedisplayed(24)
      ReturnQeenPotema.SetStage(25)
   endif
EndEvent

Armor Property PirateArmor  Auto

 

Сразу автоматом сменилась стадия квеста после попадания первого же одеяния в инвентарь,а нужно по условию что на первой стадия молчит и при добавлении второй срабатывает.А У меня срабатывает скрипт сразу после выплавки как только первый попадает в инвентарь минуя условие(Чудно))Одеяние одно и тоже.



#648 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 034 сообщений
  •    

Отправлено

А У меня срабатывает скрипт сразу после выплавки как только первый попадает в инвентарь минуя условие

Потому что у тебя в скрипте нет второго условия.

Event OnContainerChanged(ObjectReference newContainer, ObjectReference oldContainer)
if (newContainer == Game.GetPlayer()) && (Game.GetPlayer().GetItemCount(PirateArmor)>= 2)
      GSQ01.SetObjectivedisplayed(30)
      GSQ01.SetStage(30)
endif
EndEvent

Можно попробовать так.



#649 Ссылка на это сообщение Antares669

Antares669
  • Новенький
  • 15 сообщений
  •  

Отправлено

Все вопрос решился и все заработало все вышеобозначенные скрипты неправильные что исходили от меня и от глубоко уважаемого Azazellz,я просто забыл про Великий и Могучий оператор ELSE)))) :) в Скрипте банально отраженны только 2 условия это передача вещи в контейнер и смена стадии при ее попадании,но не было Третьего условия что если вещь попадает в инвентарь в количестве <=1,то стадия квеста висит на прежней 24 строке.Естестевенно раз нет третьего условия ,то доминировал скрипт второго условия и сразу после первого предмета переключал на новую стадию.Но Добавив оператор ELSE-мы включили Проверку всем Условиям и как оказалось чего то не хватает а именно задней стадии ,что если у игрока нет 2 бронек то доминирует уже не 25 стадия а именно прописанная оператором ELSE <=1  именно 24 нужная стадия!!Еще раз Благодарю Azazellz за помощь...... :bye:



#650 Ссылка на это сообщение Antares669

Antares669
  • Новенький
  • 15 сообщений
  •  

Отправлено

Потому что у тебя в скрипте нет второго условия.

Event OnContainerChanged(ObjectReference newContainer, ObjectReference oldContainer)
if (newContainer == Game.GetPlayer()) && (Game.GetPlayer().GetItemCount(PirateArmor)>= 2)
      GSQ01.SetObjectivedisplayed(30)
      GSQ01.SetStage(30)
endif
EndEvent

Можно попробовать так.

Спасибо вам большое за помощь и участие Azazellz!Но ваш скрипт как и выше мои все ошибочные,нет они конечно компилируются и работают но неправильно отображают Функциональность в игре,тоесть этакие скриптовые полуфабрикаты.где минимум условий а потому такая трабла!!Добавил третье условие через оператор (else) с ее проверкой двух предыдущих стадий и все выстроилось в одну линию и теперь -Четко и правильно работает скрипт !!Мы имея 2 шмотки переключаемся на стадию 25 а имея всего одну шмотку сидим Принудительно на стадии 24 и даже если попробуем словчить и побежим с одной шмоткой при заявленном операторе 25 типа у нас в инвентаре 2 шмотки то оператор else даже не открывает диалог квестодателя!!А вот выковав еще одну шмотку появляется диалог на передачу 2 одеяний!!Еще раз вас от Души Благодарю Azazellz. :bye:



#651 Ссылка на это сообщение Antares669

Antares669
  • Новенький
  • 15 сообщений
  •  

Отправлено

Может кому то когда то и пригодится мое инфо!!и человек сэкономит для себя пол дня поисков!!Вроде бы в простейшем скрипте!!Но посмотрите возможности Оператора ELSE-мы увидим что он контролирует все Процессы с передачей при Условиях


Полноформатный оператор if-else содержит заголовок, включающий условие, тело 1, ключевое слово else и тело 2. Тела оператора могут состоять из одного или нескольких операторов и обрамляются фигурными скобками. if ( Условие ) // Заголовок оператора и условие { Блок операторов 1, // Если условие истинно, то.. составляющих тело1 //..выполняются операторы тела 1 }else // А если условие ложно..


Оператор else

Оператор else выполняется в том случае, если условие указанное в if ложно. В таком случае будет проигнорирован код в блоке if, и программа сражу перейдет к выполнению кода в блоке else.

Данный оператор нужно прописывать после закрывающей фигурной скобки блока кода if или после единственной инструкции оператора if:
if (a < b) {
    a = b;
} else {
    b = a + 1;
}

// или так

if (c < b)
    c = 7;
else
    cout << "C >= b" << endl;
56b1de5066e2.png

if (a < b) {
    a = b;
} else {
    b = a + 1;
}

// или так

if (c < b)
    c = 7;
else
    cout << "C >= b" << endl;

Как видите, правила к коду внутри оператора else ровно такие же как и к коду внутри оператора if. Теперь давайте попробуем создать более сложную программу, которая будет использовать конструкцию ветвления.


Пример

В качестве примера давайте напишем программу, которая будет эмулировать поведение продавца магазина. Для создания подобной программы давайте воспользуемся структурой if-else:
#include <iostream>
#include <stdlib.h>
using namespace std;

int main() {
    setlocale(0, ""); // устанавливаем локаль

    bool b; // создаем переменную типа bool

    cout << "Хотите купить машину? "; // выводим сообщение
    cin >> b; // узнаем ответ покупателя

    if (b) { // проверяем, что ответил пользователь
        cout << "Хотите Audi? "; // опять сообщение
    cin >> b; // и снова узнаем ответ

    if (b) // очередная проверка
        cout << "Пройдемте со мной." << endl;
    else // предлагаем альтернативное решение
        cout << "Тогда вам в соседний отдел." << endl;
    } else
        cout << "Так зачем вы сюда пришли?" << endl;

    return 0;
7ae2ba09c473.png

#include <iostream>
#include <stdlib.h>
using namespace std;

int main() {
    setlocale(0, ""); // устанавливаем локаль

    bool b; // создаем переменную типа bool

    cout << "Хотите купить машину? "; // выводим сообщение
    cin >> b; // узнаем ответ покупателя

    if (b) { // проверяем, что ответил пользователь
        cout << "Хотите Audi? "; // опять сообщение
    cin >> b; // и снова узнаем ответ

    if (b) // очередная проверка
        cout << "Пройдемте со мной." << endl;
    else // предлагаем альтернативное решение
        cout << "Тогда вам в соседний отдел." << endl;
    } else
        cout << "Так зачем вы сюда пришли?" << endl;

    return 0;
}


Разбор кода

Здесь все должно быть вам понятным, однако давайте еще разок быстренько пробежимся по написанному нами коду:

    В строке 8 мы используем функцию, для вывода русских символов в консоль.
    В строке 14 начинается ветвление в C++. Тут у нас стандартный оператор ветвления if, а также оператор else.
    Внутри блока if у нас есть дополнительное условие.


Сообщение отредактировал Antares669: 01 октября 2020 - 21:26


#652 Ссылка на это сообщение Dova0512

Dova0512
  • Новенький
  • 13 сообщений

Отправлено

Добрый день, уважаемы мастера, помогите пожалуйста с такой проблемой. Хочу сделать так чтобы при испитии зелья у моего ГГ менялся цвет глаз и добавилось несколько пассивных эффектов. Можете подсказать как это сделать?



#653 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 034 сообщений
  •    

Отправлено

Добрый день, уважаемы мастера, помогите пожалуйста с такой проблемой. Хочу сделать так чтобы при испитии зелья у моего ГГ менялся цвет глаз и добавилось несколько пассивных эффектов. Можете подсказать как это сделать?

Какого уровня знания о скриптинге у тебя есть?

 

Может кому то когда то и пригодится мое инфо!!

Вот только к папирусу как таковому (скриптовый движок игры) отношения это имеет очень опосредованное.



#654 Ссылка на это сообщение Dova0512

Dova0512
  • Новенький
  • 13 сообщений

Отправлено

Какого уровня знания о скриптинге у тебя есть?

 

Вот только к папирусу как таковому (скриптовый движок игры) отношения это имеет очень опосредованное.

Честно говоря минимальные. Я б изучил, да только Creation Kit на вкладке скриптов вылетает.



#655 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 034 сообщений
  •    

Отправлено

Честно говоря минимальные. Я б изучил, да только Creation Kit на вкладке скриптов вылетает.

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

Ссылки на скриптовые команды, которыми это можно все сделать, я тоже дать могу.

Но как ты это все собрался в кучу собрать, если у тебя СК вылетает?

 

За тебя этот скрипт с нуля никто не напишет. Если ты хочешь, чтоб тебе помогли, тебе надо сначала основы знать и что-то готовое сюда принести, что можно будет дорабатывать.



#656 Ссылка на это сообщение Antares669

Antares669
  • Новенький
  • 15 сообщений
  •  

Отправлено

Честно говоря минимальные. Я б изучил, да только Creation Kit на вкладке скриптов вылетает.

Привет!!Вылетает-потому что скачал багованную версию (их тут много в инете разных и качать нужно не где попало) К примеру просто прекрасно себя зарекомендовала версия 1.8-это как говорится старый конь борозды не испортит-Прекрасно работает и на версии Скайрим 1.9.Вот ссылка на скачивание :https://yadi.sk/d/8_nSFAvaliNPrg

А как скачаешь не забудь его правильно настроить по этой ссылке:https://tesall.ru/to...i-creation-kit/

Ну и осваивай скриптинг -Да будет тебе Счастье)) :bye:


Сообщение отредактировал Antares669: 05 октября 2020 - 20:14


#657 Ссылка на это сообщение utac2012

utac2012
  • Новенький
  • 13 сообщений

Отправлено

Это у меня только нет исходников скриптов DLC Heartfire? Где взять-то их? Может у кого есть, скиньте плиз! :computer:



#658 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 034 сообщений
  •    

Отправлено

Это у меня только нет исходников скриптов DLC Heartfire? Где взять-то их? Может у кого есть, скиньте плиз! :computer:

\Skyrim\Data\Scripts\Source\Hearthfire\

Исходники ДЛЦшных скриптов лежат в отдельных папках.

Идут все эти папки (ХФ, ДГ, ДБ) в комлекте с СК обычно. Если у тебя их нет - скачай с другого источника.

И СК их по такому пути не увидит т.е. сурсы из этих папок надо вручную скопировать.



#659 Ссылка на это сообщение utac2012

utac2012
  • Новенький
  • 13 сообщений

Отправлено

\Skyrim\Data\Scripts\Source\Hearthfire\

Исходники ДЛЦшных скриптов лежат в отдельных папках.

Идут все эти папки (ХФ, ДГ, ДБ) в комлекте с СК обычно. Если у тебя их нет - скачай с другого источника.

И СК их по такому пути не увидит т.е. сурсы из этих папок надо вручную скопировать.

Спасибо, нашел. 



#660 Ссылка на это сообщение М.Гасникова

М.Гасникова
  • Новенький
  • 4 сообщений

Отправлено

Ребят, помогите, пожалуйста. Возможно где-то здесь есть ответ, но не заметила. 

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

Застопорилась на создании стойки для конкретного оружия (книги, уникальных предметов). Я понимаю, что нужен, например, даэдрический лук в виде статичного объекта, изначально невидимого в игре. Понимаю что для него нужно создать триггер, у которого указать свои ID и Name (ID обозвала так - aaaDaedricBowTrig, Name - Даэдрический лук) и тут ступор - КАКОЙ СКРИПТ нужен для того, чтобы:

 

- статичный объект становился видимым при наличии в инвентаре, ну, вот к примеру даэдрического лука

- оружие убиралось из инвентаря

- оружие возвращалось обратно в инвентарь 

 

Предполагаю, что в свойствах у триггера потом нужно поставить активацию игроком, привязать этот триггер к статичному объекту и во вкладке Скрипт в свойствах менять, чем будет активироваться сей объект.

Заранее спасибо


Сообщение отредактировал М.Гасникова: 28 декабря 2020 - 18:53


#661 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 034 сообщений
  •    

Отправлено

Застопорилась на создании стойки для конкретного оружия (книги, уникальных предметов).

Если вкратце, то тебе нужен изначально скрытый статик и триггер поверх него.

При активации игроком триггера срабатывает скрипт, который сначала проверяет, есть ли у тебя в инвентаре определенный предмет, и если он есть, то этот предмет переносится в скрытый контейнер, и включается статик.

При повторной активации предмет из контейнера переносится в инвентарь игрока, и статик отключается. Т.е. нужно предусмотреть еще и активацию на тот случай, когда предмет уже размещен.

 

На нексусе есть несколько моддерских ресурсов как раз для этого. Посмотри лучше там =)







Темы с аналогичным тегами papyrus, help, скрипты, вопросы

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых