Перейти к содержанию

Рекомендуемые сообщения

Опубликовано (изменено)

Получилось сделать перк защищающий от урона. Настроил активацию при низком здоровье. Но не срабатывает при мгновенной смерти, например если с большой высоты упасть - просто вышибает все здоровье, а перк не успевает сработать. 

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

Изменено пользователем Камиль
  • Ответов 51
  • Создана
  • Последний ответ

Топ авторов темы

Опубликовано
21.04.2018 16:39:22, Камиль сказал(-а):

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

Нужно. Для этого придется создать в квесте элиас игрока и отметить его как "Essential". Это также добавит возможность ловить ивенты входа/выхода в состояние Bleedout (когда персонаж припадает на колено).

  • Нравится 1
Опубликовано
21.04.2018 18:31:45, werr сказал(-а):

Нужно. Для этого придется создать в квесте элиас игрока и отметить его как "Essential". Это также добавит возможность ловить ивенты входа/выхода в состояние Bleedout (когда персонаж припадает на колено).

 

Эх. я в квестах не силен. У меня перк через зачарование накладывался. Т.е. при надевании необходимого предмета и выполнения всех проверок. Инструктаж можно?)

Опубликовано

Всем доброго дня )

как скрипт написать чтоб при открытии гроба или аллейдского контейнера  с 30%-50% шансом появится призрак или скелет ?

П.С. скрипт для облы

  • 6 месяцев спустя...
Опубликовано

Приветствую всех! Если кто-нибудь знает как уменьшить вероятность дождя в Скайриме - поделитесь, пожалуйста...

  • 6 месяцев спустя...
Опубликовано

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

Опубликовано (изменено)
17.11.2018 19:42:40, BOPOH333 сказал(-а):
Приветствую всех! Если кто-нибудь знает как уменьшить вероятность дождя в Скайриме - поделитесь, пожалуйста...

в настройках погоды и климата, смотри настройки weather и climate, их много. В самом скайриме погода настроена по регионам world/regions/tamriel, вкладка weather. Для каждого региона характерна своя погода, просто надо найти в списках погоды для каждого региона погоду содержащую в строке названия "rainy" и либо удалить ее, либо уменьшить её шанс, но это в редакторе, а как это сделать скриптом - не подскажу

Изменено пользователем verflught

Мои моды

Dasland

Paradiseplace

 

Создаю миры ради забавы  :)

 

 

 

Опубликовано
06.06.2019 20:18:37, verflught сказал(-а):

думаю этот скрипт подойдет

Этот туториал я видела. Там идёт условие взаимодействия игрока с объектом. А мне нужен скрипт на условие наличия на игроке определённого магического эффекта. Телепорт не как объект, к которому нужно подойти, а как заклинание. В любом случае спасибо за ответ.

Опубликовано (изменено)

scriptName LA_Teleport extends activemagiceffect

;-- Properties --------------------------------------
objectreference property TargetLocation auto

;-- Variables ---------------------------------------

;-- Functions ---------------------------------------

function OnEffectFinish(Actor akTarget, Actor akCaster)

game.GetPlayer().MoveTo(TargetLocation, 0.000000, 0.000000, 0.000000, true)
game.EnableFastTravel(true)
game.FastTravel(TargetLocation)
endFunction

 

Бесстыдно содрано у Lazz :) , сейчас опробую

 

UPD: 

 

scriptName Teleport extends activemagiceffect

objectreference property TeleportMarker auto

Event OnEffectFinish(Actor Target, Actor Caster)

game.GetPlayer().MoveTo(TeleportMarker)

game.EnableFastTravel(true)

game.FastTravel(TeleportMarker)

EndEvent

 

Работает. 

Изменено пользователем Brannweig
  • 8 месяцев спустя...
Опубликовано (изменено)

Раздевает и одевает ГГ по триггеру... Если что лишнее, буду рад замечаниям...

 

Scriptname aaaUnequip extends ObjectReference 

Import Game
Import Utility
Import Debug
Import Math

Formlist Property frmList auto

Event OnTriggerEnter(ObjectReference akActionRef)

if(akActionRef == Game.GetPlayer())
  actor who = akActionRef as actor
  frmList.Revert()
  UnequipWeaponActor(who)
  UnequipItemActor(who)
endif

EndEvent

EVENT  OnTriggerLeave (objectReference akActionRef)

If akActionRef == Game.GetPlayer()
  actor who = akActionRef as actor
  EquipItemActor(who)
EndIf
EndEvent

Function UnequipItemActor(Actor target)
    int index
    int slotsChecked
    slotsChecked += 0x00100000
    slotsChecked += 0x00200000 ; игнорировать зарезервированные слоты
    slotsChecked += 0x80000000

    int thisSlot = 0x01
    while (thisSlot < 0x80000000)
        if (Math.LogicalAnd(slotsChecked, thisSlot) != thisSlot)
            Armor thisArmor = target.GetWornForm(thisSlot) as Armor
            if (thisArmor)
    frmList.AddForm(thisArmor)
    target.UnequipItem(thisArmor, abSilent = true)
                index += 1
                slotsChecked += thisArmor.GetSlotMask()
            else
                slotsChecked += thisSlot
            endif
        endif
        thisSlot *= 2 ;удвоить число, чтобы перейти к следующему слоту
    endWhile
EndFunction

Function EquipItemActor(Actor akActor)
Int iIndex = frmList.GetSize()
While iIndex
  iIndex -= 1
  Form kForm = frmList.GetAt(iIndex) As form
  akActor.EquipItem(kForm, abSilent = true)
EndWhile
frmList.Revert()
EndFunction

Function UnequipWeaponActor(Actor target)
if (target.GetEquippedWeapon(true))
FORM twisWeapon=target.GetEquippedWeapon(true) as FORM
frmList.AddForm(twisWeapon)
target.UnequipItem(twisWeapon, abSilent = true)
endif
if (target.GetEquippedWeapon(false))
FORM twisWeapon=target.GetEquippedWeapon(false) as FORM
frmList.AddForm(twisWeapon)
target.UnequipItem(twisWeapon, abSilent = true)
endif
EndFunction

 

зы... нужно в ск формлист создать пустой и подключить к скриптуб, и прошу не тыкать пальцем с усмешкой. это мой первый скрипт :crazy:

Изменено пользователем budu200
  • Нравится 1
  • 2 месяца спустя...
Опубликовано

Нужен скрипт для стандартного изучения Слова Крика со Стены Слов (которая добавлена модом), чтобы ты подошел к Стене посмотрел на нее и изучил Крик.

+<Kryzard>+

Опубликовано
28.04.2020 07:17:56, krizhandr сказал(-а):

Нужен скрипт для стандартного изучения Слова Крика со Стены Слов (которая добавлена модом), чтобы ты подошел к Стене посмотрел на нее и изучил Крик.

Вам сюда 

Опубликовано (изменено) · Скрыто
Скрыто

Здравствуйте, товарищи, у меня вопрос. Я нуб и юзаю КК по Скайриму методом тыка в игре сапёр, потому как программа постоянно вылетает. При попытки создания квеста в разделе Quest Stages появилась ошибка Starting 1 compile threads for 1 files...

Compiling "QF_aaaDialogueFolloverXavier_090DD8B7"...
<unknown>(0,0): Unable to find flags file: TESV_Papyrus_Flags.flg
F:\Games\TES V - Skyrim\Data\Scripts\Source\temp\QF_aaaDialogueFolloverXavier_090DD8B7.psc(3,0): Unknown user flag Hidden
No output generated for QF_aaaDialogueFolloverXavier_090DD8B7, compilation failed.

Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on QF_aaaDialogueFolloverXavier_090DD8B7

 

Я так понял, дело в том, что нет tesv_papyrus_flags.flag, который искать надобно в архиве scripts.rar в папке Data, но у меня не только в дата, у меня нигде такой папочки нет.
Объясните начинающему - что тут можно поделать и в чём я не прав? Я пытаюсь Ксавьера сделать "говорящим" и более менее оригинальным фолловером.

 

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

Изменено пользователем Антенна связи с космосом

Я права, потому что я так сказала. Несогласные могут идти на йух вместе с прилетающими туда птичками. Ня.

  • 3 месяца спустя...
Опубликовано

День добрый господа. Давно я не открывал Creation Kit. Пришла в голову идея сделать призываемую статую(объект). Вот не могу понять как такое можно реализовать, тут по любому нужен скрипт как я понимаю чтобы в месте каста появилась статуя. Буду благодарен если поможете.

  • 1 месяц спустя...
Опубликовано

Если тема для скайрима хнаете рабочий скрипт "закрыть контейнер"? Чтобы он сам закрывался через 2-3 часа. Для прокачки навыка взлома. Мне выслали простой скрипт но KC не хочет компелировать его

  • 7 месяцев спустя...
Опубликовано (изменено)

Воспроизводим свои видео:

Синтаксис

Function PlayBink(string asFileName, bool abInterruptible = false, bool abMuteAudio = true, bool abMuteMusic = true, \
  bool abLetterbox = true) native global 

 Пример скрипта:

Scriptname aaaTestVideo extends ObjectReference  

Event onActivate(ObjectReference akActionRef)
	Game.PlayBink("BGS_Logo.bik", false, true, true, true)

	Game.GetPlayer().AddItem(money, 1000)
endEvent

MiscObject Property money  Auto  

Скрипт, при активации чего-либо, воспроизводит видео, а после выдает деньги.

 

Пример в игре: 

 

Изменено пользователем ac97
Опубликовано
Scriptname aaaGetReputationHunter extends ObjectReference  

GlobalVariable Property countRep  Auto  //Глобальная переменная с текущим кол-вом репутации

MiscObject Property plamen  Auto  //Ресурс необходимый для сдачи, для прокачки репутации

EVENT onActivate(objectReference actronaut)

	int countReputation = countRep.GetValueInt() //получаем текущее кол-во репутации
	int countKristall = Game.GetPlayer().GetItemCount(plamen) //получаем кол-во артефактов у персонажа на руках.

	if(countReputation >= 0 && countReputation < 500 && countKristall >= 1)
		countRep.Value += 25
		Game.GetPlayer().RemoveItem(plamen, 1) //Если репутации до 500 и есть артефакт для прокачки, то добавляем 25 репутации и удаляем артефакт
	elseif(countReputation <= 1000 && countReputation >= 500 && countKristall >= 2)
		countRep.Value += 25
		Game.GetPlayer().RemoveItem(plamen, 2) //Если репутации от 500 и до 1000 и есть артефакт для прокачки, то добавляем 25 репутации и удаляем артефакт
	elseif(countReputation <= 2000 && countReputation >= 1000 && countKristall >= 3)
		countRep.Value += 25
		Game.GetPlayer().RemoveItem(plamen, 3) //Если репутации от 1000 и до 2000 и есть артефакт для прокачки, то добавляем 25 репутации и удаляем артефакт
	elseif(countReputation <= 3000 && countReputation >= 2000 && countKristall >= 4)
		countRep.Value += 25
		Game.GetPlayer().RemoveItem(plamen, 4) //Если репутации от 2000 и до 3000 и есть артефакт для прокачки, то добавляем 25 репутации и удаляем артефакт
	elseif(countReputation >= 3000)
		Debug.MessageBox("Максимальное кол-во репутации для сдачи. Выполните квест на получение максимальной репутации.")
	else
		Debug.MessageBox("Недостаточно Кристаллов Ящера")
	endif
endEVENT

Скрипт для прокачки репутации любой Вами созданной гильдии. =)


Scriptname aaaShopHunters extends ObjectReference  

Message Property msgHunters  Auto  

Potion Property grayPotion  Auto  

Potion Property greenPotion  Auto  

Potion Property bluePotion  Auto  

Potion Property phioletPotion  Auto  

Potion Property redPotion  Auto  

MiscObject Property money  Auto  

GlobalVariable Property reputation  Auto  

EVENT onActivate(objectReference actronaut)
	
	int response = msgHunters.Show()
	int rep = reputation.GetValueInt()

	if (response == 0)
		if (rep >= 500 && game.getplayer().getItemCount(money) >= 50)
			Game.GetPlayer().RemoveItem(money, 50)
			Game.GetPlayer().AddItem(grayPotion, 1)
		else
			Debug.MessageBox("Недостаточно денег или репутации")
		endif

	elseif (response == 1)
		if (rep >= 1000 && game.getplayer().getItemCount(money) >= 70)
			Game.GetPlayer().RemoveItem(money, 70)
			Game.GetPlayer().AddItem(greenPotion, 1)
		else
			Debug.MessageBox("Недостаточно денег или репутации")
		endif

	elseif (response == 2)
		if (rep >= 2000 && game.getplayer().getItemCount(money) >= 100)
			Game.GetPlayer().RemoveItem(money, 100)
			Game.GetPlayer().AddItem(bluePotion, 1)
		else
			Debug.MessageBox("Недостаточно денег или репутации")
		endif

	elseif (response == 3)
		if (rep >= 3000 && game.getplayer().getItemCount(money) >= 150)
			Game.GetPlayer().RemoveItem(money, 150)
			Game.GetPlayer().AddItem(phioletPotion, 1)
		else
			Debug.MessageBox("Недостаточно денег или репутации")
		endif
		
	elseif (response == 4)
		if (rep >= 4000 && game.getplayer().getItemCount(money) >= 300)
			Game.GetPlayer().RemoveItem(money, 300)
			Game.GetPlayer().AddItem(redPotion, 1)
		else
			Debug.MessageBox("Недостаточно денег или репутации")
		endif

	elseif (response == 5)
	
	else
		Debug.MessageBox("Error")
	endif
			
endEVENT

Реализация репутационного магазина, для покупки товаров с кол-вом репутации данной гильдии.

Опубликовано
Перевод из Dec в Hex (Int в String, пример: 45678 ➔ "B26E"):
 
String Function IntToHexString(Int Value)
	Bool Negative = (Value < 0)
	Int Temp01 = Math.Abs(Value) as Int
	Int Temp02 = 0
	Int Temp03 = 0
	String TempResult = ""
	While (Temp01 != 0)
		Temp02 = Math.Floor(Temp01 / 16)
		Temp03 = Temp01 - 16 * Temp02
		TempResult = TempResult + StringUtil.GetNthChar("0123456789ABCDEF", Temp03)
		Temp01 = Temp02
	EndWhile
	String Result = ""
	Int Index = StringUtil.GetLength(TempResult)
	While (Index > 0)
		Index = Index - 1
		Result = Result + StringUtil.GetNthChar(TempResult, Index)
	EndWhile
	If (Negative)
		Return ("-" + Result)
	EndIf
	Return Result
EndFunction
 
Перевод из Hex в Dec (String в Int, пример: "A56BC7" ➔ 10841031):
 
Int Function HexStringToInt(String Value)
	Int Result = 0
	Bool Negative = (StringUtil.GetNthChar(Value, 0) == "-")
	Int Index = 0
	Int ValueLength = StringUtil.GetLength(Value)
	While (Index < ValueLength)
		String Char = StringUtil.GetNthChar(Value, Index)
		Int Pos = StringUtil.Find("0123456789ABCDEF", Char, 0)
		If (Pos != -1)
			Result += Pos * Math.Pow(16, ValueLength - Index - 1) as Int
		EndIf
		Index += 1
	EndWhile
	If (Negative)
		Return -Result
	EndIf
	Return Result
EndFunction
 
Поддерживаются отрицательные числа. Требуется SKSE из-за StringUtil. Примеры использования:
 
String ValueHex = IntToHexString(481516) ; "758EC"
Int ValueDec = HexStringToInt("ABC123") ; 11256099

————————————
don't forget your falls
————————————

  • 3 месяца спустя...
Опубликовано
Создание новой консольной команды средствами Papyrus (требуется SKSE) с примером.

ScriptName SetPerkPointsScript Extends ReferenceAlias

Event OnInit()
	RegisterForMenu("Console")
	; Debug.Trace("[SetPerkPointsScript] console menu registered")
EndEvent

Event OnMenuOpen(String MenuName)
	RegisterForKey(28) ; enter
	RegisterForKey(156) ; num enter
	; Debug.Trace("[SetPerkPointsScript] key 28 (enter) and key 156 (num enter) registered")
EndEvent

Event OnMenuClose(String MenuName)
	UnregisterForAllKeys()
	; Debug.Trace("[SetPerkPointsScript] all keys unregistered")
EndEvent

Event OnKeyDown(Int KeyCode)
	; Debug.Trace("[SetPerkPointsScript] key 28 (enter) or key 156 (num enter) pressed")
	Int CommandIndex = UI.GetInt("Console", "_global.Console.ConsoleInstance.Commands.length") - 1
	; Debug.Trace("[SetPerkPointsScript] Int CommandIndex >> " + CommandIndex as String)
	String LatestCommand = UI.GetString("Console", "_global.Console.ConsoleInstance.Commands." + CommandIndex as String)
	; Debug.Trace("[SetPerkPointsScript] String LatestCommand >> " + LatestCommand)
	String[] CommandParts = StringUtil.Split(LatestCommand, " ")
	ExecCommand(CommandParts[0], CommandParts)
EndEvent

Function ExecCommand(String CommandName, String[] CommandArray)
	; Debug.Trace("[SetPerkPointsScript] String CommandName >> " + CommandName)
	If (CommandName == "SetPerkPoints") || (CommandName == "SPP")
		If (CommandArray.Length == 2)
			Int PointsToSet = CommandArray[1] as Int
			If (PointsToSet < 0)
				PointsToSet = 0
			ElseIf (PointsToSet > 255)
				PointsToSet = 255
			EndIf
			Game.SetPerkPoints(PointsToSet)
			ConsoleUtil.PrintMessage("Player perk points count successfully set to " + PointsToSet as String)
		Else
			ConsoleUtil.PrintMessage("Error! Wrong function syntax. Usage:\nSetPerkPoints <int>\nSPP <int>")
		EndIf
	EndIf
EndFunction
Скрипт прикрепляется к alias'у с игроком в квесте, который стартует при первой установке мода. При нажатии клавиши Enter или Num Enter будет запущена функция ExecCommand с двумя аргументами - названием команды и массивом из всех элементов команды. Так, в моём примере при вводе команды "spp 136" функции будут переданы аргументы "spp" и ["spp", "136"]. Обратите внимание, что все аргументы строковые, так что вам может потребоваться каст.

————————————
don't forget your falls
————————————

  • 1 месяц спустя...
Опубликовано
Когда в SkyUI вы используете настройку типа OptionColor (выбор цвета из небольшой палитры), то мод возвращает цвет в формате Int (целое число). Например, светло-голубой цвет будет иметь значение 10092543. Вам может понадобиться вытащить из этого значения числа RGB, для чего некоторые предлагают операции деления, вычитания или целого остатка. Да, эти методы рабочие, но это квадратно-гнездовой способ мышления, когда есть битовые операции. Выглядит это вот так:
 
Int[] Function ColorToRGB(Int Value)
    Int[] Result = New Int[3]
    Result[0] = Math.RightShift(Math.LogicalAnd(Value, 0xFF0000), 16) ; red
    Result[1] = Math.RightShift(Math.LogicalAnd(Value, 0xFF00), 8) ; green
    Result[2] = Math.RightShift(Math.LogicalAnd(Value, 0xFF), 0) ; blue
    Return Result
EndFunction
 
Этот вид функции полностью рабочий, но я привёл его таким, лишь чтобы показать алгоритм действий. Если подумать, то смещение на 0 бит не имеет смысла, как и "логическое И" с 0xFF0000 в связке со смещением на 16 бит. Без "логического И" ABCDEF после смещения превращается в AB.CDEF, которое сразу обрезается до AB из-за типа данных Int. Таким образом, более оптимальный вид функции будет таким:
 
Int[] Function ColorToRGB(Int Value)
    Int[] Result = New Int[3]
    Result[0] = Math.RightShift(Value, 16) ; red
    Result[1] = Math.RightShift(Math.LogicalAnd(Value, 0xFF00), 8) ; green
    Result[2] = Math.LogicalAnd(Value, 0xFF) ; blue
    Return Result
EndFunction
 
Пример использования:
 
Int[] RGB = ColorToRGB(10092543)
; [153, 255, 255]
  • Нравится 2

————————————
don't forget your falls
————————————

  • 2 месяца спустя...
Опубликовано
18.09.2021 22:21:21, Meridiano сказал(-а):

Когда в SkyUI вы используете настройку типа OptionColor (выбор цвета из небольшой палитры), то мод возвращает цвет в формате Int (целое число). Например, светло-голубой цвет будет иметь значение 10092543. Вам может понадобиться вытащить из этого значения числа RGB, для чего некоторые предлагают операции деления, вычитания или целого остатка. Да, эти методы рабочие, но это квадратно-гнездовой способ мышления, когда есть битовые операции. Выглядит это вот так: 

Int[] Function ColorToRGB(Int Value)
    Int[] Result = New Int[3]
    Result[0] = Math.RightShift(Math.LogicalAnd(Value, 0xFF0000), 16) ; red
    Result[1] = Math.RightShift(Math.LogicalAnd(Value, 0xFF00), 8) ; green
    Result[2] = Math.RightShift(Math.LogicalAnd(Value, 0xFF), 0) ; blue
    Return Result
EndFunction
 Этот вид функции полностью рабочий, но я привёл его таким, лишь чтобы показать алгоритм действий. Если подумать, то смещение на 0 бит не имеет смысла, как и "логическое И" с 0xFF0000 в связке со смещением на 16 бит. Без "логического И" ABCDEF после смещения превращается в AB.CDEF, которое сразу обрезается до AB из-за типа данных Int. Таким образом, более оптимальный вид функции будет таким: 
Int[] Function ColorToRGB(Int Value)
    Int[] Result = New Int[3]
    Result[0] = Math.RightShift(Value, 16) ; red
    Result[1] = Math.RightShift(Math.LogicalAnd(Value, 0xFF00), 8) ; green
    Result[2] = Math.LogicalAnd(Value, 0xFF) ; blue
    Return Result
EndFunction
 Пример использования: 
Int[] RGB = ColorToRGB(10092543)
; [153, 255, 255]

Теперь осталось реализовать структуры, классы, шаблоны да и полностью библиотеку STL =)
  • 2 недели спустя...
Опубликовано
14.02.2020 06:42:01, budu200 сказал(-а):

Раздевает и одевает ГГ по триггеру... Если что лишнее, буду рад замечаниям...

 

Scriptname aaaUnequip extends ObjectReference 

Import Game
Import Utility
Import Debug
Import Math

Formlist Property frmList auto

Event OnTriggerEnter(ObjectReference akActionRef)

if(akActionRef == Game.GetPlayer())
  actor who = akActionRef as actor
  frmList.Revert()
  UnequipWeaponActor(who)
  UnequipItemActor(who)
endif

EndEvent

EVENT  OnTriggerLeave (objectReference akActionRef)

If akActionRef == Game.GetPlayer()
  actor who = akActionRef as actor
  EquipItemActor(who)
EndIf
EndEvent

Function UnequipItemActor(Actor target)
    int index
    int slotsChecked
    slotsChecked += 0x00100000
    slotsChecked += 0x00200000 ; игнорировать зарезервированные слоты
    slotsChecked += 0x80000000

    int thisSlot = 0x01
    while (thisSlot < 0x80000000)
        if (Math.LogicalAnd(slotsChecked, thisSlot) != thisSlot)
            Armor thisArmor = target.GetWornForm(thisSlot) as Armor
            if (thisArmor)
    frmList.AddForm(thisArmor)
    target.UnequipItem(thisArmor, abSilent = true)
                index += 1
                slotsChecked += thisArmor.GetSlotMask()
            else
                slotsChecked += thisSlot
            endif
        endif
        thisSlot *= 2 ;удвоить число, чтобы перейти к следующему слоту
    endWhile
EndFunction

Function EquipItemActor(Actor akActor)
Int iIndex = frmList.GetSize()
While iIndex
  iIndex -= 1
  Form kForm = frmList.GetAt(iIndex) As form
  akActor.EquipItem(kForm, abSilent = true)
EndWhile
frmList.Revert()
EndFunction

Function UnequipWeaponActor(Actor target)
if (target.GetEquippedWeapon(true))
FORM twisWeapon=target.GetEquippedWeapon(true) as FORM
frmList.AddForm(twisWeapon)
target.UnequipItem(twisWeapon, abSilent = true)
endif
if (target.GetEquippedWeapon(false))
FORM twisWeapon=target.GetEquippedWeapon(false) as FORM
frmList.AddForm(twisWeapon)
target.UnequipItem(twisWeapon, abSilent = true)
endif
EndFunction

 

зы... нужно в ск формлист создать пустой и подключить к скриптуб, и прошу не тыкать пальцем с усмешкой. это мой первый скрипт :crazy:

Решил опробовать скрипт, но словил ошибки компиляции

Спойлер
Starting 1 compile threads for 1 files...
Compiling "GK_Script_Unequip"...
D:\Games\Skyrim\Data\Scripts\Source\temp\GK_Script_Unequip.psc(38,17): LogicalAnd is not a function or does not exist
D:\Games\Skyrim\Data\Scripts\Source\temp\GK_Script_Unequip.psc(38,17): cannot call the member function LogicalAnd alone or on a type, must call it on a variable
D:\Games\Skyrim\Data\Scripts\Source\temp\GK_Script_Unequip.psc(38,52): cannot compare a none to a int (cast missing or types unrelated)
D:\Games\Skyrim\Data\Scripts\Source\temp\GK_Script_Unequip.psc(39,37): GetWornForm is not a function or does not exist
D:\Games\Skyrim\Data\Scripts\Source\temp\GK_Script_Unequip.psc(39,59): cannot cast a none to a armor, types are incompatible
D:\Games\Skyrim\Data\Scripts\Source\temp\GK_Script_Unequip.psc(44,42): GetSlotMask is not a function or does not exist
D:\Games\Skyrim\Data\Scripts\Source\temp\GK_Script_Unequip.psc(44,29): cannot add a int to a none (cast missing or types unrelated)
No output generated for GK_Script_Unequip, compilation failed.

Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on GK_Script_Unequip
Опубликовано (изменено)

Скрипт для ванны/бассейна/бадьи и т.д. Предназначен для вампиров. Если человек будет использовать, то проиграется только сообщение с отвращением и анимация.

Scriptname GK_script_bath extends ObjectReference 


EffectShader Property DLC1nVampireGoreFXS Auto

MagicEffect Property PERKEFFECT Auto

String Property Fail Auto
String Property Success Auto

String Property MyAnimation_01  Auto
Idle Property MyAnimation_02  Auto
Idle Property MyAnimation_03  Auto
String Property MyAnimation_04  Auto
String Property MyAnimation_05  Auto
Idle Property IdleStop_Loose  Auto

ObjectReference Property PlayerRef  Auto
ObjectReference Property MovetoInside Auto
ObjectReference Property MovetoOutside Auto
 
Sound Property WashesTheBody01  Auto
Sound Property WashesTheBody02  Auto
Sound Property SitsInTheBath01  Auto
Sound Property SitsInTheBath02  Auto
Sound Property GetsUpInTheBath01  Auto
Sound Property GetsUpInTheBath02  Auto
Sound Property WipesOff  Auto
Sound Property Vomit  Auto

Spell Property PerkSpell1 Auto
Spell Property PerkSpell2 Auto
Spell Property HasVampirism Auto

GlobalVariable Property GameHour  Auto
ImageSpaceModifier Property TG05BlackFrame  Auto


Event OnActivate(ObjectReference akActionRef)


If akActionRef == Game.GetPlayer().HasSpell(HasVampirism) == 0
If Game.GetPlayer().IsWeaponDrawn()
  Game.DisablePlayerControls(abMovement =true, abFighting = true, abCamSwitch = true, abLooking = true, abSneaking = true, abMenu = true, abJournalTabs= true)
  Utility.Wait(1.5)
  Game.EnablePlayerControls(abMovement =true, abFighting = true, abCamSwitch = true, abLooking = true, abSneaking = true, abMenu = true, abJournalTabs= true)
EndIf
  Game.DisablePlayerControls(abMovement =true, abFighting = true, abCamSwitch = true, abLooking = false, abSneaking = true, abMenu = true, abJournalTabs= true)
  Game.ForceThirdPerson()
  Utility.Wait(0.5)
  debug.notification(Fail)
  Debug.SendAnimationEvent(Game.GetPlayer(), MyAnimation_04)
  Vomit.Play(PlayerRef)
     PerkSpell2.Cast(Game.GetPlayer(), Game.GetPlayer())
  Utility.Wait(1.5)
  Game.GetPlayer().PlayIdle(IdleStop_Loose)
  Game.EnablePlayerControls(abMovement =true, abFighting = true, abCamSwitch = true, abLooking = false, abSneaking = true, abMenu = true, abJournalTabs= true)
Return


Else
If akActionRef == Game.GetPlayer().HasSpell(HasVampirism) == 1
If Game.GetPlayer().IsWeaponDrawn()
  Game.DisablePlayerControls(abMovement =true, abFighting = true, abCamSwitch = true, abLooking = true, abSneaking = true, abMenu = true, abJournalTabs= true)
   Utility.Wait(1.5)
  Game.EnablePlayerControls(abMovement =true, abFighting = true, abCamSwitch = true, abLooking = true, abSneaking = true, abMenu = true, abJournalTabs= true)
EndIf
  Game.DisablePlayerControls(abMovement =true, abFighting = true, abCamSwitch = true, abLooking = false, abSneaking = true, abMenu = true, abJournalTabs= true)
  Game.ForceThirdPerson()
  Utility.Wait(0.5)
  Debug.SendAnimationEvent(Game.GetPlayer(), MyAnimation_05)
  Utility.Wait(2.0)
  TG05BlackFrame.ApplyCrossFade()
  Utility.Wait(3.5)
  Game.GetPlayer().UnequipAll()
  Game.GetPlayer().Moveto(MovetoInside)
  Utility.Wait(0.5)
  Debug.SendAnimationEvent(Game.GetPlayer(), MyAnimation_01)
  TG05BlackFrame.Remove()
  SitsInTheBath01.Play(PlayerRef)
  Utility.Wait(2.0)
  DLC1nVampireGoreFXS.Play(Game.GetPlayer())
  Game.GetPlayer().PlayIdle(MyAnimation_02)
  GetsUpInTheBath01.Play(PlayerRef)
  Utility.Wait(2.7)
  Game.GetPlayer().PlayIdle(MyAnimation_03)
  WashesTheBody01.Play(PlayerRef)
  Utility.Wait(2.0)
  DLC1nVampireGoreFXS.Stop(Game.GetPlayer())
  Utility.Wait(1.0)
  Debug.SendAnimationEvent(Game.GetPlayer(), MyAnimation_01)
  SitsInTheBath02.Play(PlayerRef)
  Utility.Wait(2.0)
  DLC1nVampireGoreFXS.Play(Game.GetPlayer())
  Game.GetPlayer().PlayIdle(MyAnimation_02)
  GetsUpInTheBath02.Play(PlayerRef)
  Utility.Wait(2.7)
  Game.GetPlayer().PlayIdle(MyAnimation_03)
  WashesTheBody02.Play(PlayerRef)
  TG05BlackFrame.ApplyCrossFade()
  Utility.Wait(2.0)
  WipesOff.Play(PlayerRef)
  Utility.Wait(3.0)
  DLC1nVampireGoreFXS.Stop(Game.GetPlayer())
  Game.GetPlayer().PlayIdle(IdleStop_Loose)
  Game.GetPlayer().Moveto(MovetoOutside)
  Game.EnablePlayerControls(abMovement =true, abFighting = true, abCamSwitch = true, abLooking = false, abSneaking = true, abMenu = true, abJournalTabs= true)
  GameHour.SetValue(GameHour.GetValue()+1)
  debug.notification("Прошёл один час")
     PerkSpell1.Cast(Game.GetPlayer(), Game.GetPlayer())
  debug.notification(Success)
  TG05BlackFrame.Remove()
  EndIf
EndIf

EndEvent

Видео

Пример того, что будет, если бадью использует не вампир

Видео

UPD: обновил скрипт. Добавил новые анимации, кастомные звуки и изменил затемнение экрана. Изменено пользователем GOLDEN_KINDER

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×
×
  • Создать...