Jump to content

LarannKiar

Premium Member
  • Posts

    1256
  • Joined

  • Last visited

Everything posted by LarannKiar

  1. Yes, select the “Preferred Speed” flag on the TEMP_P package and select “Run” from the dropdown menu.
  2. It depends. If the mods relies on its name, then it can't be converted to .esl without changing its script or script properties.
  3. Select the "Starts Dead" flag on the NPC's object reference. (You can select that reference in the Render Window).
  4. I'd create two scripts, one for the buttons and one for the handler quest. A script attached to each Button's object reference. Scriptname ButtonScript extends ObjectReference Const Group Buttons ObjectReference Property Button01 Auto Const ObjectReference Property Button02 Auto Const ObjectReference Property Button03 Auto Const endGroup Group Globals GlobalVariable Property ButtonIndex Auto Const endGroup Event OnActivate(ObjectReference akActionRef) If Self == Button01 ButtonIndex.SetValueInt(1) (ButtonHandler as ButtonHandlerScript).HandleOnButtonPress() ElseIf Self == Button02 ButtonIndex.SetValueInt(2) (ButtonHandler as ButtonHandlerScript).HandleOnButtonPress() ElseIf Self == Button03 ButtonIndex.SetValueInt(3) (ButtonHandler as ButtonHandlerScript).HandleOnButtonPress() EndIf EndEvent And another script attached to a handler quest. Scriptname ButtonHandlerScript extends Quest Const Function HandleOnButtonPress() If ButtonIndex.GetValueInt() == 1 Function01() ElseIf ButtonIndex.GetValueInt() == 2 Function02() ElseIf ButtonIndex.GetValueInt() == 3 Function03() EndIf EndFunction
  5. The .esp solution seems faster but here's how to use the ForceRefIntoAlias command: 1. Create a Hard Save 2. SSQ DLC04DialogueSettlement (SSQ is called "Set Console Scope Quest") 3. Fill the aliases one by one with the references (RefIDs) shown on the screenshot. For Reference Aliases: 0601fb00.ForceRefIntoAlias "MackenzieBridgeman" For Location Aliases: ForceLocationAlias 0601FCEC NukaTownLocation Here are the Reference Aliases, Location Aliases and their RefIDs:
  6. ResetInterior works on interior cells only so I guess you used the game setting method from the CK website to reset all cells. Were you in the Cambirdge Ruins during the cell reset? (It doesn't work in cells which are currently loaded). RE quests are very different. Open the console, click on one of the ghoul corpses and type "sv" (called ShowVariables). This command will show if it's an alias on a Random Encounter quest. Like Alias_Corpse01 on quest REXXXXX quest.. (UFO4P fixed the RE quest bugs and the MS13ChemDealLatimerMarker has nothing to do with RE quests). But did you mean the random encounter marker on the bridge to the Beantown Brewery?
  7. Scriptname YOURSCRIPTNAME extends Terminal Const ;Group MapMarkers ObjectReference Property MapMarker01 Auto Const ;Don't forget to fill these properties with the map markers (select them in the Render Window) ObjectReference Property MapMarker02 Auto Const endGroup Event OnMenuItemRun(int auiMenuItemID, ObjectReference akTerminalRef) If auiMenuItemID == 1 ;you pressed the menu item (index 1) MapMarker01.AddToMap() ElseIf auiMenuItemID == 2 ;you pressed the menu item (index 2) MapMarker02.AddToMap() EndIf EndEvent
  8. If you're using a holotape, you can use the OnMenuItemRun(int auiMenuItemID, ObjectReference akTerminalRef) event: Event OnMenuItemRun(int auiMenuItemID, ObjectReference akTerminalRef) If auiMenuItemID == 1 ;you pressed the menu item (index 1) MapMarker01.AddToMap() ElseIf auiMenuItemID == 2 ;you pressed the menu item (index 2) MapMarker02.AddToMap() EndIf EndEvent This event is in the terminal script. So you can attach a script like this to a terminal. It also works if the holotape (terminal) is in the Pip-Boy. (I wouldn't use terminal script fragments.. just a lot of unnecessary files).
  9. Well, the "an actor's reference" isn't the reference.. :smile: It would look like this: ;Actor Property Actor Property MyActor Auto Const Alias_Looter.ForceRefTo(MyActor) ;OR YOU CAN USE ReferenceAlias Property (if you've created a Reference Alias) ReferenceAlias Property MyActorRefAlias Auto Const Alias_Looter.ForceRefTo((MyActorRefAlias.GetReference() as Actor)) Note that the quest TEMP_Q does not stop.. that's why there's a TEMP_Q_for_Aliases quest. That quest starts, stops and fills its reference aliases depending on their conditions.
  10. Then it's simple. Create an alias called Alias_Looter on the TEMP_Q_AliasQuest. Then use the "Find Matching Reference" to fill the alias when the quest starts. Add your conditions (distance check, Actors only, In Loaded Area flag, GetDead == 0.). And don't forget to link the Alias_Looter on the TEMP_Q quest to the Alias_Looter on the TEMP_Q_for_Aliases quest. So it would be similar to the Alias_Body01. (You can also see the conditions I added to the Alias_Body01 alias). You can: Alias_Looter.ForceRefTo(an actor's reference).
  11. Event if the script is attached to an object reference, you can still use that object reference as a property: Scriptname TEMP extends ObjectReference Const ObjectReference Property TEMP_ObjRef Auto Const ;you can fill this property with "itself" Event OnLoad() JustAFunction() EndEvent Function JustAFunction() float xPos = TEMP_ObjRef.GetPositionX() EndFunction
  12. There's an AddToMap object reference script function. Use that on the map marker's reference. You can use the OnQuestInit() event (if your quest is flagged as "Start Game Enabled"). (But editing Map Markers is also an option: remove the "Initially Disabled" and add the "Visible" flag to the map marker's reference).
  13. Here's the quest script.. I upload the files (.esp and the scripts) into a Google Drive folder.. I also wrote comments on most script functions. I chose the a Vault 81 resident (V81CitizenF02T2Residence [FormID: 00111F63] as the "looter" NPC. Looted bodies use quest alias fill conditions. (Note that I wouldn't use this method but this was your approach). I'd rather use distance events). Of course it's not a "final" version: the timer times should be edited, this plugin has only one Alias_Body01, it needs more debugging and adjustments (especially the "LootedBody_01_Actor").. (The Ref Collection Alias is discarded, you can delete it). The "retrieve" animation is also not included. But I think it's a good start.. Good luck. :smile: Scriptname TEMP_S extends Quest Group Looters ReferenceAlias Property Alias_Looter Auto Const endGroup Group Corpses ReferenceAlias Property Alias_Body01 Auto Const endGroup Group Quests Quest Property TEMP_Q_for_Aliases Auto Const Quest Property TEMP_Q Auto Const endGroup Group Globals GlobalVariable Property TEMP_G_01 Auto Const GlobalVariable Property TEMP_G_PackageFinished Auto Const endGroup Group Keywords Keyword Property TEMP_K_Looted Auto Const endGroup Event OnQuestInit() StartAliasQuest() ;START the quest TEMP_Q_for_Aliases. Corpse alias fill conditions are there. The Alias_Body01 ref alias on this quest is linked to that ref alias. EndEvent Function StartAliasQuest() if TEMP_Q_for_Aliases.IsRunning() == 1 ;failsafe TEMP_Q_for_Aliases.Stop() endif Utility.Wait(0.5) ;wait for stopping... if TEMP_Q_for_Aliases.IsRunning() == 0 ;Start the alias quest TEMP_Q_for_Aliases.Start() debug.notification("Alias quest started") endif Utility.Wait(0.5) ;wait for the aliases to get filled... If Alias_Body01.GetReference() == none ;Alias has not been filled (fill conditions are not met) debug.notification("Alias is NOT filled, start loot timer") StartTimer(20, 255) ;try to start the alias quest again. (LOOP timer) Else debug.notification("Alias is filled, StartLoot()") StartLoot() EndIf EndFunction Event OnTimer(int aiTimerID) if aiTimerID == 255 ;LOOP timer StartAliasQuest() debug.notification("LOOP timer expired") EndIf If aiTimerID == 555 ;FALSE TIMER: if the actor can't loot the body in 60 seconds, abort the package End_Loot() debug.notification("aiTimerID 555 expired") Endif EndEvent Function StartLoot() TEMP_G_01.SetValueInt(1) ;for the packages (Alias_Looter.GetReference() as Actor).EvaluatePackage() StartTimer(60, 555) ;failsafe: if the looter can't path to the body, abort the package ;WAIT FOR PACKAGE STOP EndFunction Function End_loot() ;called from package "on end" fragment / falsafe timer (ID: 555) If TEMP_G_PackageFinished.GetValueInt() == 0 ;function was called from the falsafe timer debug.notification("END loot called from FALSAFE TIMER") if TEMP_Q_for_Aliases.IsRunning() == 1 TEMP_Q_for_Aliases.Stop() debug.notification("Alias quest stopped") endif TEMP_G_01.SetValueInt(0) TEMP_G_PackageFinished.SetValueInt(0) StartTimer(2, 255) ;start again LOOP timer. For the failsafe timer, no need for 20 seconds. ElseIf TEMP_G_PackageFinished.GetValueInt() == 1 ; ;function was called from the package "on end" fragment LootProcedure() MarkBodyAsLooted() debug.notification("END loot called from PACKAGE") if TEMP_Q_for_Aliases.IsRunning() == 1 TEMP_Q_for_Aliases.Stop() debug.notification("Alias quest stopped") endif TEMP_G_01.SetValueInt(0) StartTimer(10, 255) ;start again LOOP timer EndIf EndFunction Function MarkBodyAsLooted() debug.notification("MarkBodyAsLooted() running") ;AliasColl_LootedBodies.AddRef((Alias_Looter.GetReference() as Actor)) ;add looted bodies to a ref coll alias. Ref coll actors have a keyword that prevents the looter from looting them again. Remove the looted bodies one by one with a Game Timer. LootedBody_01_Actor = (Alias_Body01.GetReference() as Actor) LootedBody_01_Actor.AddKeyword(TEMP_K_Looted) StartTimerGameTime(0.5, 355) ;looted body has to have this keyword for at least two hours. (so looter won't loot this body in this period). EndFunction Actor LootedBody_01_Actor Event OnTimerGameTime(int aiTimerID) If aiTimerID == 355 RemoveLootedBody() EndIf EndEvent Function RemoveLootedBody() debug.notification("RemoveLootedBody() Timer expired") LootedBody_01_Actor.RemoveKeyword(TEMP_K_Looted) EndFunction Function LootProcedure() ;called rom package EndLoot() function. Thisis the actual "loot" procedure. (Animation functions should be placed here). If (Alias_Body01.GetReference()) != none && (Alias_Looter.GetReference()) != none (Alias_Body01.GetReference() as Actor).RemoveAllItems((Alias_Looter.GetReference() as actor)) debug.notification("Looted!") ;DEBUGGING... ElseIf (Alias_Body01.GetReference()) == none && (Alias_Looter.GetReference()) != none debug.notification("Alias_Body01 is none!") ElseIf (Alias_Body01.GetReference()) != none && (Alias_Looter.GetReference()) == none debug.notification("Alias_Looter is none!") ElseIf (Alias_Body01.GetReference()) == none && (Alias_Looter.GetReference()) == none debug.notification("Alias_Body01 AND Looter are none!") EndIf EndFunction
  14. OK, I'm creating a working version for you right now.. :)
  15. Well, unfortunately this bug exists in the vanilla game too.. Does it happen if you type "StartQuest DLC04DialogueSettlement" after "ResetQuest DLC04DialogueSettlement"? You can fill the aliases one by one using the console (ForceRefIntoAlias command) or create an .esp plugin..
  16. You can change an actor's voice type (Actor script) with this function: SetOverrideVoiceType( VoiceType akVoiceType ) It's from the "DLC01BotSetVoiceType" script: Event OnEffectStart(Actor akTarget, Actor akCaster) oldVoiceType = (akTarget as Actor).GetVoiceType() (akTarget as Actor).SetOverrideVoiceType(newVoiceType) EndEvent
  17. I don't use UFO4P so I don't know.. But if you're interested, here's their official bug tracker link. Cells of a "non-cleared" location reset in 72 ingame hours while the "cleared" ones in 96 ingame hours. Note that the reset timer always gets reset when you enter the Back Street Apparel. You can "force reset" interior cells.. You shouldn't do this if you have a quest that relies on that location. 1. Create a Hard Save 2. type "ResetInterior BackStreetApparel01". Another option is to reset every cell in the game. Here's how to do it.
  18. It is, actually.. during the Diamond City Blues quest, a marker gets enabled. This marker enables Trish, Nelson and their goons and disables the raiders and their turrets. The marker never gets disabled then in the vanilla game.. so the location's original state won't be restored. I attached this script to the Reference Aliases of Trish, Nelson Latimer and the three goons (AmbushGuard01, AmbushGuard02, AmbushGuard03) on the quest MS13 (Diamond City Blues). ReferenceAlias Property MS13Actor Auto Const Quest Property MS13 Auto Const ObjectReference Property MS13ChemDealLatimerMarker Auto Const Event OnUnload() If MS13Actor.GetActorRef().IsDead() == 1 && MS13.GetStageDone(1000) MS13Actor.GetActorRef().Disable() If MS13ChemDealLatimerMarker.IsEnabled() MS13ChemDealLatimerMarker.Disable() EndIf EndIf EndEvent But of course you can do it manually in the console. 1. Create a Hard Save 2. "3FE3E.Disable" (disables the "MS13ChemDealLatimerMarker") 3. Click on the corspes and type "disable".
  19. You can use ESM flagged .esp files as masters in the Creation Kit. But if you've already converted an esp to esm, in FO4Edit, you can rename the master from "XY.esm" to "XY.esp".
  20. The "holotapeLoaded" animation generates an event when a holotape is inserted to your Pip-Boy (immediatelly). Event OnQuestInit() RegisterForAnimationEvent(Game.GetPlayer(), "holotapeLoaded") endevent Event OnAnimationEvent(ObjectReference akSource, string asEventName) if (asEventName == "holotapeLoaded") debug.notification("holotapeLoaded") endIf endEvent But it does not work if the "insert" animation is skipped (when you load your holotape the second time). I think calling a function on the OnMenuItemRun event is the most reliable.
  21. I am not a programmer so I can't help you but I've heard (self proclaimed) C++ programmers who didn't know what to do with F4SE.. So I think your best approach is to get in touch with people who can create such plugins.
  22. The WorkshopNPCScript needs to be attached to the NPC too. Otherwise, the setpv (SetPapryusVariable) and AddKeyword commands wouldn't be useful. And not every NPC can be turned to a Settler.
  23. That's the issue. The Reference Aliases in the dialogue quest should've been filled with the reference of each NPC when you started your current playthrough. (Because that quest is flagged as "Start Game Enabled"). To solve this problem, you have to reset the quest. 1. Create a Hard Save 2. Create a screenshot of the list showing the quest stages. Your current stage is 410 but it's also important which stages are marked as (done). To see them, use the "SQS DLC04DialogueSettlement" command. 3. Type "ResetQuest DLC04DialogueSettlement". Now, check if the quest is running and the aliases are filled. ResetQuest was successful: If it's running and the aliases are filled. You should see something like this: "Quest: DLC04DialogueSettlement - Running - Current Stage: 0". If the Aliases are filled, you should see numbers instead of NONE. (Like 0604C76A for GrandchesterMapMarker). Type "SetStage DLC04DialogueSettlement X". X is the stage which was marked as (done) in the screenshot you previously made. So if stage 10 was marked as (done), then type: "SetStage DLC04DialogueSettlement 10". Repeat this step until the last (done) stage is set. ResetQuest was unsuccessful: If the quest isn't running. (You see: Quest: DLC04DialogueSettlement - Stopped"). In this case, you have to play with the "StopQuest DLC04DialogueSettlement" and "ResetQuest DLC04DialogueSettlement" commands until you get that quest running. ResetQuest was also unsuccessful: If the quest is running but the aliases are still NONE. In this case, the problem is probably caused by a mod.
×
×
  • Create New...