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

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

Опубликовано
21.03.2022 13:47:09, SirLuciusFreyr сказал(-а):

Доброго времени суток, господа-программисты. Просветите, чем ModActorValue и ForceActorValue отличаются между собой?

Первое модифицирует - т.е. добавляет к исходному.

Второе устанавливает значение, вне зависимости от исходного.

  • Нравится 1
  • Ответов 840
  • Создана
  • Последний ответ

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

Опубликовано (изменено)
21.03.2022 16:04:38, Azazellz сказал(-а):

Первое модифицирует - т.е. добавляет к исходному.

Второе устанавливает значение, вне зависимости от исходного.

 

Тогда в чём отличие SetActorValue от ForceActorValue? У них какие-то разные области применения внутри списка ActorValue? Или ускользающая от меня разница в том, как они применяются на атрибуты?

 

Ещё один вопрос: а могу я скриптом динамически изменять скорость игрока по нажатию клавиши и без конфликта с другими модификаторами? Как реализовать такой скрипт в игре, повесить через перк?

Изменено пользователем SirLuciusFreyr
Опубликовано
28.03.2022 06:06:15, SirLuciusFreyr сказал(-а):
У них какие-то разные области применения внутри списка ActorValue? Или ускользающая от меня разница в том, как они применяются на атрибуты?

Есть базовый показатель, и есть после модификаторов. И это все сложно взаимосвязано.

Ведь кроме Force и Mod есть еще Set, Damage и Restore.

Почитай примечания на страницах, там есть на эту тему кое что.

Еще могу порекомендовать страницу для "консольных" версий этих команд посмотреть (не для скриптовых). Там тоже кое-что написано.

 

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

 

 

28.03.2022 06:06:15, SirLuciusFreyr сказал(-а):
Ещё один вопрос: а могу я скриптом динамически изменять скорость игрока по нажатию клавиши и без конфликта с другими модификаторами?

 

Скрипты медленно работают для быстрого и динамического изменения скорости (ну, например, ускорять персонажа на n% k раз в секунду - для реализации медленного набора скорости, например). Тут плагин под skse писать надо.

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

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

Всем ЗДРАВИЯЖЕЛАЮ! Ребяты, памагитя! Кайо совсем не шарит в скриптах и прочих сложных фишках редахтора, но Кайо очень нужен скрипт на "сновидения". То есть, вот персонаж, выполняя квест Арретино, ложится спать в любом месте и просыпается у Тёмного Братства, а мне надо, чтобы он на определённой стадии авторского квеста лёг и проснулся в отдельной локации сна. Можно, конечно, подсмотреть в квесты ТБ, как они замечают событие сна, телепорт там пришить и всё такое, но там обычно черт ногу сломит, особенно, если не знаешь, где искать, да и одну очень важную проблему это не решит: по завершению сна (при смене стадии квеста или после диалога) игрока надо перенести обратно к той же самой кровати, на которой он уснул. К тому же, если это возможно и не особо сложно в реализации, хотелось бы на время сна добавить игроку ограничения: "перегруженность" (чтобы не бегал, а шел простым шагом тихоходки) и чтобы не мог зайти в инвентарь, достать оружие или подобрать что-то (это ж не сны с Фредди Крюггером, откуда можно шляпу спереть, да и авось ему взбредёт в голову мысля что-то выбросить? Это должен быть именно сон, почти как обычный), и чтобы потом с него эти эффекты снимались.

Изменено пользователем Кайо
Опубликовано
14.04.2022 09:48:51, Кайо сказал(-а):

Всем ЗДРАВИЯЖЕЛАЮ! Ребяты, памагитя! Кайо совсем не шарит в скриптах и прочих сложных фишках редахтора, но Кайо очень нужен скрипт на "сновидения". То есть, вот персонаж, выполняя квест Арретино, ложится спать в любом месте и просыпается у Тёмного Братства, а мне надо, чтобы он на определённой стадии авторского квеста лёг и проснулся в отдельной локации сна. Можно, конечно, подсмотреть в квесты ТБ, как они замечают событие сна, телепорт там пришить и всё такое, но там обычно черт ногу сломит, особенно, если не знаешь, где искать, да и одну очень важную проблему это не решит: по завершению сна (при смене стадии квеста или после диалога) игрока надо перенести обратно к той же самой кровати, на которой он уснул. К тому же, если это возможно и не особо сложно в реализации, хотелось бы на время сна добавить игроку ограничения: "перегруженность" (чтобы не бегал, а шел простым шагом тихоходки) и чтобы не мог зайти в инвентарь, достать оружие или подобрать что-то (это ж не сны с Фредди Крюггером, откуда можно шляпу спереть, да и авось ему взбредёт в голову мысля что-то выбросить? Это должен быть именно сон, почти как обычный), и чтобы потом с него эти эффекты снимались.

Да, смотришь как это сделано в квесте ТБ, делаешь так же.

Наверняка там какая-то система отслеживания встроена, в квест или на игрока напрямую, которая включается по эвентам OnSleepStart или OnSleepStop.

 

Сделать обратный перенос просто - когда триггер сна срабатывает, перед непосредственным переносом ставишь маркер на позицию игрока. В конце сна переносишь игрока назад на этот маркер. Маркер потом удаляешь.

 

Что касается запрещения игроку что-то делать - есть команда DisablePlayerControls.

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

Хотя может есть и какой-то другой, более элегантный способ.

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

Всем привет, пытаюсь в своём моде сделать интеграцию мода Convenient Horses для своих спутников.

Но не выходит присвоить ReferenceAlias из своего квеста в квест CHFollower, тут же сбрасываются в None.

 

вот как пытался, взял функции из Convenient Horses(кроме SetFollower):


CHFollowerAliasScript[] Property FollowerScripts Auto
Quest Property CHFollower Auto Hidden
CHFollowerQuestScript Property CHFollowerQuest Auto Hidden

; Find all active followers and fill local aliases.
Function GetFollowers()
	; * Generic followers from MarkAndRecallFollowerQuest quest.
	; By default there is only one follower, and one animal follower which doesn't concern us.
	; Some multi-follower mods build uppon this quest by adding new aliases and extending functionality.
	; We can support such mods by doing alias ID scan at run-time.
	int id = 0
	int idMax = 20 ; Probe quest for this many IDs.
	bool endScan = false
	referenceAlias sourceAlias
	referenceAlias localAlias
	actor follower
	while !endScan
		; Alias probe.
		;sourceAlias = MarkAndRecallFollowerQuest.GetAlias(id) as ReferenceAlias
		sourceAlias = (MarkAndRecallFollowerQuest.GetNthAlias(id) as ReferenceAlias)
		trace(Self + "sourceAlias: " + (sourceAlias.GetActorRef() as Actor).GetActorBase().GetName(), 1)
		if (sourceAlias != none)
			; Reference probe.
			follower = sourceAlias.GetReference() as actor
			if follower
				; Follower validity checks.
				if (follower.HasKeyword(ActorTypeNPC) || follower.HasKeyword(JobHireling)) && (follower.IsInFaction(MarkAndRecallCurrentFollower) || follower.IsInFaction(CurrentFollowerFaction)) && !follower.IsInFaction(CHFollowerFaction)
					trace(Self + "follower: " + follower.GetActorBase().GetName(), 1)
					; Find first empty alias.
					localAlias = (GetCHFollowerScript(None) as ReferenceAlias)
					; Add.
					;if ((localAlias.GetActorRef() == none) && (follower != none))
					;if ((localAlias) && (follower != none))
					if localAlias
						localAlias.ForceRefTo(follower)
						;Notification("id: " + id)
						Notification("localAlias[" + id + "]: " + (localAlias.GetActorRef() as Actor).GetActorBase().GetName())
						Notification("FollowerScripts[" + id + "]: " + (((CHFollower) as CHFollowerQuestScript).FollowerScripts[id].GetActorRef() as Actor).GetActorBase().GetName())
						Notification("IsInFaction[" + id + "]: " + ((CHFollower) as CHFollowerQuestScript).FollowerScripts[id].GetActorRef().IsInFaction(CHFollowerFaction))
						
						;trace(Self + "localAlias: " + (localAlias.GetActorRef() as Actor).GetActorBase().GetName(), 1)
						;trace(Self + "FollowerScripts: " + (((CHFollower) as CHFollowerQuestScript).FollowerScripts[id].GetActorRef() as Actor).GetActorBase().GetName(), 1)
					; Can't have more generic followers.
					else;if (localAlias.GetActorRef() == none)
						Notification("localAlias id: " + id)
						;((CHFollower) as CHFollowerQuestScript).FollowerScripts[id].ForceRefTo(follower)
						endScan = true
					endif
				endif
			endif
		endif
		id += 1
		endScan = endScan || id >= idMax
	endwhile
EndFunction

; Searches local follower aliases for a given follower ref.
; akFollowerRef: Follower reference to search for.
; abFullSearch: Whether to include unique follower aliases in a search.
; Returns the first follower script (extending ReferenceAlias) matching the given ref.
CHFollowerAliasScript Function GetCHFollowerScript(objectReference akFollowerRef)
	; Generic search.
	int index = 0
	int count = ((CHFollower) as CHFollowerQuestScript).FollowerScripts.Length
	;trace(Self + "FollowerScripts Length: " + ((CHFollower) as CHFollowerQuestScript).FollowerScripts.Length, 1)
	while index < count
		if (((CHFollower) as CHFollowerQuestScript).FollowerScripts[index] as ReferenceAlias).GetRef() == akFollowerRef
			Notification("index[" + index + "]: ")
			return ((CHFollower) as CHFollowerQuestScript).FollowerScripts[index]
		endif
		index += 1
	endwhile
	return None
EndFunction



Function SetFollower(ObjectReference FollowerRef)
	actor FollowerActor = FollowerRef as Actor
	FollowerActor.RemoveFromFaction(DismissedFollowerFaction)
	iFollowerDismiss = 0
	iFollowerRestOrder = 0
	iFollowerRelaxOrder = 0
	iFollowerTradeOrder = 0
	;FollowerActor.AddToFaction(CurrentFollowerFaction)
	FollowerActor.AddToFaction(MarkAndRecallCurrentFollower)
	;FollowerActor.RemoveFromFaction(CurrentFollowerFaction)
	If (FollowerActor != MarkAndRecallQuest.MARMerchantRef)
		If (FollowerActor.IsInFaction(ASDBServicesMerchant))
			FollowerActor.RemoveFromFaction(ASDBServicesMerchant)
		EndIf
	EndIf
	If !(FollowerActor.IsInFaction(MarkAndRecallFollower))
		FollowerActor.AddToFaction(MarkAndRecallFollower)
	EndIf
	If FollowerActor.GetRelationshipRank(GetPlayer()) < 3 && FollowerActor.GetRelationshipRank(GetPlayer()) >= 0
		FollowerActor.SetRelationshipRank(GetPlayer(), 3)
	EndIf
	FollowerActor.SetPlayerTeammate()
	;FollowerActor.SetAV("Morality", 0)
	pFollowerAlias.ForceRefTo(FollowerActor)
	FollowerActor.EvaluatePackage()
	If (MarkAndRecallCheckRequirementsQuest.ConvenientHorsesExtended == true)
		If((MarkAndRecallQuest.bFollowerHorsesSwitcher == true) && (MarkAndRecallQuest.bisOriginalFollowerHorsesUsed == false))
			If !(FollowerActor.IsInFaction(CHFollowerFaction))
				GetFollowers()
				;FollowerActor.AddToFaction(CHFollowerFaction)
			EndIf
		EndIf
		;Notification("Convenient Horses: " + MarkAndRecallCheckRequirementsQuest.ConvenientHorsesExtended)
		;Notification("CHFollowerFaction: " + CHFollowerFaction)
		;If !(FollowerActor.IsInFaction(CHFollowerFaction))
		;	FollowerActor.AddToFaction(CHFollowerFaction)
			;Notification("FollowerActor not In Faction: " + FollowerActor.GetActorBase().GetName())
		;EndIf
	EndIf
EndFunction
Изменено пользователем aaa112aaa
Опубликовано

Что-то мне казалось, что Convenient Horses сразу должен работать с моддовыми спутниками.

Ну или после настройки в МСМ.

Разве нет?

Опубликовано
20.05.2022 16:36:56, Azazellz сказал(-а):

Что-то мне казалось, что Convenient Horses сразу должен работать с моддовыми спутниками.

Ну или после настройки в МСМ.

Разве нет?

Ну во первых в последней версии Convenient Horses нету МСМ меню, а во вторых мои спутники добавляются в собственные фракции (MarkAndRecallCurrentFollower и MarkAndRecallFollower) , а CurrentFollowerFaction исключена, так как дублируются диалоги найма, увольнения и прочего.

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

Ладно, забил пока на лошадей, сейчас другая проблема:

в скрипте квеста есть:

bool[] Property HasAdventureOutfit = False Auto Hidden Conditional 

а в скрипте ReferenceAlias - MarkAndRecallFollowerAliasScript есть функция - SetAdventureOutfit()

в ней присвоение выше упомянутой bool переменной выдаёт ошибку - " loop did not match anything at input '=' "

Сама функция:


Function SetAdventureOutfit()
	int i
	i = MarkAndRecallFollowerQuest.GetFollowerIndex(pFollowerAlias.GetActorRef())
	If(!(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit)
		(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit = new bool[3]
	EndIf
	(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit[i] = SetOutfit(MarkAndRecall_OutfitListAdventure[i])
        " Error: required (...)+ loop did not match anything at input '=' "
endFunction

Что это значит, как исправить?

Опубликовано (изменено)
27.05.2022 16:20:02, aaa112aaa сказал(-а):

присвоение выше упомянутой bool переменной выдаёт ошибку - " loop did not match anything at input '=' "

 

(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit = SetOutfit(MarkAndRecall_OutfitListAdventure)
        " Error: required (...)+ loop did not match anything at input '=' "

Проблема решилась вот так:


bool[] Property HasAdventureOutfit Auto Hidden Conditional

Function SetAdventureOutfit()
	int i
	i = MarkAndRecallFollowerQuest.GetFollowerIndex(pFollowerAlias.GetActorRef())
	If(!(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit)
		(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit = new bool[3]
	EndIf
	(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit[i] == SetOutfit(MarkAndRecall_OutfitListAdventure[i])
endFunction

Но это не правильное решение проблемы, уже исправил.

Изменено пользователем aaa112aaa
Опубликовано
28.05.2022 00:23:11, aaa112aaa сказал(-а):

Проблема решилась вот так:


bool[] Property HasAdventureOutfit Auto Hidden Conditional

Function SetAdventureOutfit()
	int i
	i = MarkAndRecallFollowerQuest.GetFollowerIndex(pFollowerAlias.GetActorRef())
	If(!(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit)
		(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit = new bool[3]
	EndIf
	(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit[i] == SetOutfit(MarkAndRecall_OutfitListAdventure[i])
endFunction

Но это не правильное решение проблемы, уже исправил.

Здравствуйте! Заинтриговали - а какое тогда правильное? Можно весь скрипт увидеть?

Опубликовано
28.05.2022 07:53:28, CISCO.:i:..:i:. сказал(-а):

Здравствуйте! Заинтриговали - а какое тогда правильное? Можно весь скрипт увидеть?

в скрипте ReferenceAlias - MarkAndRecallFollowerAliasScript:

bool[] Property arrHasAdventureOutfit Auto

и

Function SetAdventureOutfit()
	int i = MarkAndRecallFollowerQuest.GetFollowerIndex(pFollowerAlias.GetActorRef())
	(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit = Self.SetOutfit(MarkAndRecall_OutfitListAdventure[i])
	arrHasAdventureOutfit[i] = (Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit
	;Notification("SetAdventureOutfit arrHasAdventureOutfit[" + i + "]: " + arrHasAdventureOutfit[i])
	;Notification("SetAdventureOutfit MarkAndRecall_OutfitListAdventure[" + i + "]: " + MarkAndRecall_OutfitListAdventure[i].GetSize())
endFunction

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

Опубликовано
28.05.2022 09:30:16, aaa112aaa сказал(-а):

в скрипте ReferenceAlias - MarkAndRecallFollowerAliasScript:

bool[] Property arrHasAdventureOutfit Auto

и

Function SetAdventureOutfit()
	int i = MarkAndRecallFollowerQuest.GetFollowerIndex(pFollowerAlias.GetActorRef())
	(Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit = Self.SetOutfit(MarkAndRecall_OutfitListAdventure[i])
	arrHasAdventureOutfit[i] = (Self.GetOwningQuest() as MarkAndRecallFollowerQuestScript).HasAdventureOutfit
	;Notification("SetAdventureOutfit arrHasAdventureOutfit[" + i + "]: " + arrHasAdventureOutfit[i])
	;Notification("SetAdventureOutfit MarkAndRecall_OutfitListAdventure[" + i + "]: " + MarkAndRecall_OutfitListAdventure[i].GetSize())
endFunction

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

Делаю один мод с кучей квестов - может посотрудничаем?

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

Такс, господа. Тут такое дело, кажется, что-то у меня работает не так со скриптами... Мучился со своим скриптом и тут дошло опробовать скомпилировать уже готовый игровой скрипт обратно. А не тут-то было, оно выдаёт ошибку со скриптами из игры. Пробовал компилировать через PapyrusCompiler и через Papyrus Assembler GUI. Или оно обратно игровые ванильные скрипты у всех так не хочет компилировать?

Изменено пользователем Unlimited Cloud
Опубликовано
28.06.2022 10:34:00, Unlimited Cloud сказал(-а):

Такс, господа. Тут такое дело, кажется, что-то у меня работает не так со скриптами... Мучился со своим скриптом и тут дошло опробовать скомпилировать уже готовый игровой скрипт обратно. А не тут-то было, оно выдаёт ошибку со скриптами из игры. Пробовал компилировать через PapyrusCompiler и через Papyrus Assembler GUI. Или оно обратно игровые ванильные скрипты у всех так не хочет компилировать?

Ты бы хоть ошибку показал.

Опубликовано (изменено)
28.06.2022 11:21:19, Azazellz сказал(-а):

Ты бы хоть ошибку показал.

Ок. Для примера скрипт под названием transmuteMineralScript, трансмутация руды. Долно же быть нормальным, оно же прямиком из игры... Ещё пару других скриптов пробовал - результат тот же. Попытка компиляции данного скрипта в программе PapyrusCompile заканчивается вот этим:

Warning: No flags selected

[ transmuteMineralScript.psc ]

Starting 1 compile threads for 1 files...
Compiling "transmuteMineralScript"...
No output generated for G:\Games\The Elder Scrolls V Skyrim - Special Edition\Data\Source\Scripts\transmuteMineralScript.psc, compilation failed.
Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on G:\Games\The Elder Scrolls V Skyrim - Special Edition\Data\Source\Scripts\transmuteMineralScript.psc

--- ERRORS ---

ActiveMagicEffect.psc(1,0): Unknown user flag Hidden
Game.psc(1,0): Unknown user flag Hidden
MiscObject.psc(1,0): Unknown user flag Hidden
MiscObject.psc(1,0): Unknown user flag Hidden
MiscObject.psc(1,0): Unknown user flag Hidden
Sound.psc(1,0): Unknown user flag Hidden
Message.psc(1,0): Unknown user flag Hidden
Actor.psc(1,0): Unknown user flag Hidden
Actor.psc(1,0): Unknown user flag Hidden
ObjectReference.psc(1,0): Unknown user flag Hidden
Actor.psc(1,0): Unknown user flag Hidden
transmuteMineralScript.psc(19,17): type mismatch while assigning to a objectreference (cast missing or types unrelated)
ObjectReference.psc(1,0): Unknown user flag Hidden
ObjectReference.psc(1,0): Unknown user flag Hidden
MiscObject.psc(1,0): Unknown user flag Hidden
transmuteMineralScript.psc(20,11): type mismatch on parameter 1 (did you forget a cast?)
transmuteMineralScript.psc(20,31): cannot compare a none to a int (cast missing or types unrelated)
transmuteMineralScript.psc(20,31): cannot relatively compare variables to None
ObjectReference.psc(1,0): Unknown user flag Hidden
ObjectReference.psc(1,0): Unknown user flag Hidden
MiscObject.psc(1,0): Unknown user flag Hidden
transmuteMineralScript.psc(22,9): type mismatch on parameter 1 (did you forget a cast?)
ObjectReference.psc(1,0): Unknown user flag Hidden
ObjectReference.psc(1,0): Unknown user flag Hidden
MiscObject.psc(1,0): Unknown user flag Hidden
transmuteMineralScript.psc(23,9): type mismatch on parameter 1 (did you forget a cast?)
Game.psc(1,0): Unknown user flag Hidden
Game.psc(1,0): Unknown user flag Hidden
ObjectReference.psc(1,0): Unknown user flag Hidden
ObjectReference.psc(1,0): Unknown user flag Hidden
MiscObject.psc(1,0): Unknown user flag Hidden
transmuteMineralScript.psc(25,15): type mismatch on parameter 1 (did you forget a cast?)
transmuteMineralScript.psc(25,35): cannot compare a none to a int (cast missing or types unrelated)
transmuteMineralScript.psc(25,35): cannot relatively compare variables to None
ObjectReference.psc(1,0): Unknown user flag Hidden
ObjectReference.psc(1,0): Unknown user flag Hidden
MiscObject.psc(1,0): Unknown user flag Hidden
transmuteMineralScript.psc(27,9): type mismatch on parameter 1 (did you forget a cast?)
ObjectReference.psc(1,0): Unknown user flag Hidden
ObjectReference.psc(1,0): Unknown user flag Hidden
MiscObject.psc(1,0): Unknown user flag Hidden
transmuteMineralScript.psc(28,9): type mismatch on parameter 1 (did you forget a cast?)
Game.psc(1,0): Unknown user flag Hidden
Game.psc(1,0): Unknown user flag Hidden
Sound.psc(1,0): Unknown user flag Hidden
Sound.psc(1,0): Unknown user flag Hidden
Message.psc(1,0): Unknown user flag Hidden
Message.psc(1,0): Unknown user flag Hidden

Time: 5,367766 seconds
Input: G:\Games\The Elder Scrolls V Skyrim - Special Edition\Data\Source\Scripts\transmuteMineralScript.psc
Output: G:\Games\The Elder Scrolls V Skyrim - Special Edition\Data\Source\transmuteMineralScript.pex

Finished with 48 errors

Изменено пользователем Unlimited Cloud
Опубликовано (изменено)

Ещё одна вещь, которая меня беспокоит. Дело в том, что когда создаю скрипт в Креэшен ките на эффекте заклинания, то он не прикрепляется к этому заклинанию. И не отображается для этого. Но в мод менеджере он есть, если открывать отдельно его отдельно от функции прикрепления в магическом эффекте.

Изменено пользователем Unlimited Cloud
Опубликовано
28.06.2022 11:25:58, Unlimited Cloud сказал(-а):
Попытка компиляции данного скрипта в программе PapyrusCompile заканчивается вот этим:

Хм. Похоже на то, что некорректно распакован или установлен СК. Компилятор не видит флаги и другие скрипты-исходники с определениями, или не может их прочитать.

Проверь, правильно ли распаковал. Папка scripts\source должна быть заполнена. Если там есть под-папки с ДЛЦшными исходниками - их содержимое тоже можно в сурсы перебросить, если ты планируешь со скриптами из ДЛЦ работать.

Опубликовано (изменено)
29.06.2022 08:35:38, Azazellz сказал(-а):

Хм. Похоже на то, что некорректно распакован или установлен СК. Компилятор не видит флаги и другие скрипты-исходники с определениями, или не может их прочитать.

Проверь, правильно ли распаковал. Папка scripts\source должна быть заполнена. Если там есть под-папки с ДЛЦшными исходниками - их содержимое тоже можно в сурсы перебросить, если ты планируешь со скриптами из ДЛЦ работать.

Реально! Моё почтение! Поставлю статую в моде в честь тебя с именной табличкой.

Изменено пользователем Unlimited Cloud
Опубликовано (изменено)

А такой вопросик, какими переменными можно обозначить именно игрока скрипте заклинания, в эвенте?

Изменено пользователем Unlimited Cloud
Опубликовано
29.06.2022 13:12:03, Unlimited Cloud сказал(-а):

А такой вопросик, какими переменными можно обозначить именно игрока скрипте заклинания, в эвенте?

game.getplayer()

 

https://www.creationkit.com/index.php?title=Category:Script_Objects

https://www.creationkit.com/index.php?title=Event

 

Советую добавить в закладки, там много полезного.

Опубликовано (изменено)
30.06.2022 08:35:58, Azazellz сказал(-а):

game.getplayer()

 

https://www.creationkit.com/index.php?title=Category:Script_Objects

https://www.creationkit.com/index.php?title=Event

 

Советую добавить в закладки, там много полезного.

Ну да, оно и так в закладках. Просто пока ещё не выходит ориентироваться хорошо. Посидел, покопался, что-то нашёл. Но это не сработало. И так по кругу много раз. И переменные менял, и в скобках разные варианты пробовал... Пытался даже сделать отдельное заклинание "на себя" сделать, которое боле менее работало, и что бы этот скрипт кастовал то отдельное заклинание.
Самая главная задача на данный момент подобрать нужный Event. Он у меня 90% не правильный. Или что-то надо дописать в нём...
Я пытаюсь сделать заклинание, которое выпускает стрелу в цель и при этом сжирает стрелу на это дело. Пытался через onCastStart и onEffectStart. Но так как заклинание на цель, то и эффект, видимо, применяется на эту цель при прилёте в неё стрелы.
Вот и не знаю, что может помочь уже, идеи закончились. Причём пробовал для теста сделать эффект "на себя" дабы скрипт проверить. Тогда половина скрипта работает. Потому и решил, что именно Event не правильный.

Scriptname UC_ArrowShot_Script extends ActiveMagicEffect 

{Если уничтожает железную стрелу, то позволяет выстрелить заклинанием. Иначе блокирует эффект и выводит сообщение об отсутвии стрелы.}

Ammo Property Arrow  Auto
Message Property UC_noArrows_MSG  Auto 
Sound Property FailureSFX  Auto 

Event OnCastStart(ACTOR akActor)
akActor == game.getPlayer()
if akActor.getItemCount(Arrow) >= 1
  akActor.removeItem(Arrow, 1)
else
  akActor.InterruptCast()
  FailureSFX.play(akActor)
  UC_noArrows_MSG.show()
endif
EndEvent

Думаю, опробую вариант с созданием другого заклинания при касте.

Изменено пользователем Unlimited Cloud
Опубликовано

Сделал, наконец-то, своё заклинание через каст на себя и RemoteCast. Даже две третьих скрипта работает... Но столкнулся с "ложкой дёгтя" - дело в том, что при удалении стрелы из инвентаря выводится сообщение об этом. Можно ли как-то запретить это?

Опубликовано
01.07.2022 01:42:23, Unlimited Cloud сказал(-а):

Сделал, наконец-то, своё заклинание через каст на себя и RemoteCast. Даже две третьих скрипта работает... Но столкнулся с "ложкой дёгтя" - дело в том, что при удалении стрелы из инвентаря выводится сообщение об этом. Можно ли как-то запретить это?

Открой команду RemoveItem на СК вики. Там есть дополнительные параметры, в том числе и для этого.

  • 4 недели спустя...
Опубликовано

Кстати, а можно ли в скрипте заклинания без евента команду задать? В заклинании у меня OnEffectStart. А вот совсем без него можно? Или евент обязательная часть?

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

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

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

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

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

Войти

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

Войти
×
×
  • Создать...