Jump to content

Rhutos

Supporter
  • Posts

    13
  • Joined

  • Last visited

Nexus Mods Profile

About Rhutos

Profile Fields

  • Country
    Germany
  • Currently Playing
    Pirate Warriors 4, FFXIV
  • Favourite Game
    Star Wars - Knights of the old Republic 2

Rhutos's Achievements

Apprentice

Apprentice (3/14)

  • First Post
  • Collaborator Rare
  • Conversation Starter
  • Week One Done
  • One Month Later

Recent Badges

0

Reputation

  1. Hey, I am working on remakes of my previous mods using F4SE. I'd like to create a custom menu based on the "MessageBoxMenu" or the general pause menu. Once I created menu's for a skyrim mod "Tame the beasts of skyrim II" based on SKI templates in the "*. fla" format. The implementation of Custom Menus in the UI script seems very different and it's sparsely documented. I couldn't find any uncompiled templates, so I tried to copy the "MessageBoxMenu.swf", rename it and call it via: Debug.Trace ("Open AVB_Test...") if (UI.RegisterCustomMenu ("AVB_Test", "AVB_Test", "root1.Menu_mc", new UI:MenuData)) UI.OpenMenu ("AVB_Test") else Debug.Trace ("Menu registration did not work...") endif The game pauses, until a key is pressed, but nothing shows up. If I try a different "root path" the game freezes. All "Modding resources" I found, are meant for interface mods/add-ons, not for interactive menu's. What I am missing?
  2. Hey I don't know if it's a known issue, but the GetValue condition function (not the Papyrus variant) always returns an undefined value for me. The condition is always false (0.00). At first I thought it's because my AV is custom. But then I tested a few other AVs, and they seem to always return undefined too. It's really annoying, since I need 3 instanced, Values on multiple Generic Actors. So attaching a valid script will not work. (RefCollectionAliases can only hold 1 variable for everyone, and Arrays cannot be conditional. ActiveMagicEffects can be attached via RefCollectionAlias, but are not valid for VMScriptVariable and so return 0 as well.) Papyrus however, always return the correct value via GetValue (Papyrus). GetValuePercent seems to be buggy too: http://upload.rising-games.net/upload/Public/Nexus/CreationKit3.png What does Papyrus have to say? Source: Actor akTargetRef = GetActorRef () Trace ("Alias: " + akTargetRef) if (akTargetRef) akTargetRef.SetValue (OverrideMode, 100.00) akTargetRef.DamageValue (OverrideMode, 50) Trace ("ValueBase: " + akTargetRef.GetBaseValue (OverrideMode)) Trace ("Value: " + akTargetRef.GetValue (OverrideMode)) Trace ("Percent: " + akTargetRef.GetValuePercentage (OverrideMode)) endif Log: [02/22/2017 - 09:59:28AM] Alias: [companionactorscript < (0001CA7D)>] [02/22/2017 - 09:59:28AM] ValueBase: 100.000000 [02/22/2017 - 09:59:28AM] Value: 50.000000 [02/22/2017 - 09:59:28AM] Percent: 0.500000
  3. Update I got it to work. I simply re-created the protectron NPC_ form and now it seems to work flawless. Thanks for your help
  4. Thanks for your advice. I am always testing my mods on early, non-modded saves in sanctuaryDidn't seem to workMy script don't use any of these events. It's a workshop script, so it uses workshop events. The protectron doesn't use any custom scripts at all, just the default protectronScript by bethesda. The scripts work just fine (except the furniture's issue with animations). Just the protectrons acts like the furniture doesn't exist. ProtectronPodWorkshopScript Modified ProtectronSleepInsidePodPKG Result
  5. Hmm I simply cannot get the protectron to use it's pod with the ProtectronSleepInsidePodPKG package The package starts, the linked ref is correct. But the protectron just stands there doing nothing. IsUnconscious () returns false AI is enabled :sad:
  6. abProtectronRaceScript is a native bethesda script and uses PlayAnimation ("Occupied"). I didn't find the error, but a workaround. Using SnapIntoInteraction on the protectron. Thanks for you help. Now I just need to find out, why the protectron won't run the shutdown package correctly
  7. It's the same as in the original form. Maybe there is a NIF I didn't extract. I uploaded a screenshot of the original too.
  8. Hello, i am trying to expand my MaxLockWorkshopTerminals mod with protectron pods Everything works fine, except the "Occupied" animation does not play I copied the ProtectronPod01 for it and of course I kept the AnimFurnProtectronPod keyword But every time, the abProtectronRaceScript or any other script, tries to play the animation I get the error: the animation graph (GenericFurniture) cannot currently process event "Occupied". I tried: To enable / disable the pod and the spawned protectron in different orderCreate a while loop to keep trying, to play the animationSpawning the ProtectronPod01 instead and link the protectron to itPlaced the objects in a Cell (maybe it just won't work if created on run time?)Add certain keywords or remove all keywords except AnimFurnProtectronPodDouble and triple checked the ProtectronPod01 form and my workshop form in FO4Edit.Replaced my custom protectron const property with the default lvlProtectron formIt's just no use, the furniture won't start the animation at all and keeps throw out the error. Google and any other search was useless as ever and just shown me "my game keeps crashing, please help me" threads. http://www.creationkit.com/fallout4/index.php?title=Subgraphs only handles racial animations My last hope is, anyone else has a clue. I would appreciate any help.
  9. Is there any mod for workshop mod out that delivers fitting types (concrete / wood / whatever) with EVERY size? (32 x 256, 32 x 128, 32 x 32) of floor / roof / etc? Is there a technical limitation? Wasteland Workshop for example delivers 128 x 128 floor tiles, but no 32 x 128 or 32 x 32. Many workshop mods deliver pretty "new" content like homemaker. But there is always something lacking. Either there are holes, or it looks stupid (or navmesh gapes). Sure you can scale it down via console. But because you cannot separate scale down X and Y scale, you have to place a bunch of them, and cause performance problems. For people who didn't know: 1 standard floor tile / wall has a size of 256 x 256 units.
  10. Thanks for your replies. Unfortunately in most of my attempts the game just crashes.
  11. I need a 1800 x 1400 x 600 box nif that can be selected (in workshop mode - as workshopobject) but does not collide with Actors (And if possible, don't turn them transparent on overlapping) I tried it by myself, using 3DSMax 2016 and NifSkope 2.0 but I couldn't figure it out All tutorials are for skyrim nifs
  12. Yes I know, what properties are, and how the parent script works I didn't modify any code, I created it by myself. Just 3 parent functions are overriden and the parent functions are called by them
  13. Hi fellas, A few days before I started to work on settler assignment for my plugin: Neutral Vertibirds.I had a tough time, because the whole settlement menu seems to be hardcoded (I crawled every script with Notepad++)First, I tried without any success - to make the Vertibird Actor assignable.But it seems to be impossible to do this with ActorsIf your Actor does not have the "WorkshopWorkObject", "WorkshopAllowCommand" or "WorkshopAllowMove" keyword, there is no "Assign" command, just a "Go to" command whenever you command a settler and highlight the ActorIf you add one of these keywords and try to assign, the engine just tries to command your highlighted ActorI found no keyword, actor value, script or perk to prevent this. Not one. So I tried to move on and use the "OnCommandModeGiveCommand (Actor akSender, int aeCommandType, ObjectReference akTarget)" eventThe result:If you try to command a busy settler he sends a "0" (none) command without a targetIf you try to command the settler again (or out of action) he sends a "0" (none) command with a nearby, invisible, non selectable ref (I think it's a temporary marker) I tried to catch these actions: event Actor.OnCommandModeGiveCommand (Actor akSender, int aeCommandType, ObjectReference akTarget) Debug.Trace ("Command! Actor: " + akSender + ", Target: " + akTarget + ", Type: " + aeCommandType) Debug.Trace ("Actor's distance to Vertibird: " + akSender.GetDistance (self)) if (akTarget && aeCommandType == 0) Debug.Trace ("target's distance to Vertibird: " + akTarget.GetDistance (self)) if (akTarget == self || akTarget.GetDistance (self) <= 500.00 && akSender != Pilot) Debug.Trace ("The actor is now a pilot!") AssignActor (akSender as WorkshopNPCScript) AssignPilot (akSender) ;Custom function endif endif endevent Yay! Half of the time it works (if I would change the 500.00 to some higher value It might be work anytime - but even then if you don't want to assign a pilot to the Vertibird...)But it's imprecise and confusing So I tried: Use a furniture looks like a Vertibird to catch the command and then switch to the real (Actor) Vertibird.The Vertibird has to be unable to control anyway - if there is no pilotI used a furniture with the "WorkshopWorkObject" keyword and the "Vehicles\Vertibird\Vertibird01.nif". Nice! No minigun and wrong airscrew direction, but it's okay - for now.But hold on! The furniture has a +90 Angle relative to the real Vertibird (the origin seems to be shifted too)So i tried: Plan A - Use SetAngle (GetAngleX (), GetAngleY (), GetAngleZ () +/- 90) whenever the furniture or the actor is moving.Annoying but seems to work - but then the Actor randomly teleports anywhere else... Plan B - Use NifScope 2.0 Pre-Alpha 4 to rotate the "Vehicles\Vertibird\Vertibird01.nif", rename and saveI don't know what I am doing wrong, but rotating the NiNode does not seem to affect the Collision boxThe absolute same problem: The actor is teleport randomly at random times. I tried:SetPosition instead of MoveTo (maybe it's more precise?) - Still teleportingSetMotionType (Motion_Keyframed) if disabled - Still teleportingUse Debug.EnableCollisions (false) - Still teleportingCompletely remove any Movement functions out of my script - Still random teleports on Enable / DisableA few other things So either (the perfect solution) I find a way to make an actor assignableorI need to find out why the Actor teleporting around randomly when enabled / disabled The vertibird furniture script: Scriptname NTRVertibirdFurnitureScript extends WorkshopObjectScript group Vertibird Keyword Property LinkVehicle Auto Const {Vehicle link keyword for reflinking pilot to the vertibird} Keyword Property AttachPilot Auto Const {Keyword to find the pilot slot use: p-AttachPilot} Form Property LvlNTRVertibird Auto Const {The real vertibird to create it on the fly} endgroup group Messages Message Property NTRVertibirdWorkbenchTransferMessage Auto Const {"Your items were transfered to the workbench"} Message Property NTRVertibirdPlayerTransferMessage Auto Const {"Your items were transfered to your inventory"} Message Property NTRVFTVertibirdTravelMessage Auto Const {"Vertibird were sent to <Location>"} endgroup ;Hidden refs ObjectReference Property VertibirdRef Auto Hidden ObjectReference Property PilotRef Auto Hidden ;Constants float RESPAWN_TIMER = 3.00 Const ;3 game hours float MAXIMAL_WORKSHOP_DISTANCE = 80000.00 ;Maximal distance to search for a workshop if the id is missing... ;---------------------------------------------------------- ; Tries to return pilot property - if there isn't try ; to find it with a while loop ;---------------------------------------------------------- Actor function GetPilot () if !(PilotRef) int Index = 1; ObjectReference Passenger while (PilotRef == none && Index < 6) Passenger = GetNthLinkedRef (Index, LinkVehicle) if (Passenger) if ((VertibirdRef as Actor).IsBeingRiddenBy (Passenger as Actor) && Passenger.HasKeyword (AttachPilot) == true) PilotRef = Passenger endif endif Index += 1 endwhile endif return (PilotRef as Actor) endfunction ;---------------------------------------------------------- ; Assign a pilot and link it to the vertibird ;---------------------------------------------------------- function AssignPilot (ObjectReference akPilot) NTRVertibirdMainScript MainRef = (VertibirdRef as NTRVertibirdActorScript).NTRVertibirdMain as NTRVertibirdMainScript Actor Vertibird = VertibirdRef as Actor Actor Pilot ;Handle previous pilot if (GetPilot ()) Pilot = PilotRef as Actor MainRef.RemovePilot (PilotRef) Pilot.SetLinkedRef (none, LinkVehicle) Pilot.SetVehicle (none) if (Vertibird.IsBeingRiddenBy (Pilot)) ;Dismount previous workshop Pilot.Dismount () endif Pilot.EvaluatePackage (true) ;Vertibird.EnableAI (false) endif ;Assign new pilot (or none) PilotRef = akPilot if (PilotRef) Pilot = PilotRef as Actor Pilot.SetLinkedRef (self, LinkVehicle) MainRef.AddPilot (Pilot) Pilot.SetVehicle (Vertibird) Pilot.EvaluatePackage (true) ;Vertibird.EnableAI (true) endif Debug.Trace ("Assigned pilot: " + Pilot) endfunction ;---------------------------------------------------------- ; Assign the vertibird pilot ;---------------------------------------------------------- function AssignActor (WorkshopNPCScript newActor = None) Parent.AssignActor (newActor) if (newActor && newActor != PilotRef) Debug.Notification ("PILOT!") PilotRef = newActor AssignActor (none) ;Reset own assignment AssignPilot (PilotRef as Actor) Disable () VertibirdRef.Enable () GoToState ("Assigned") Debug.Trace ("Pos - X: " + X + ", Y: " + Y + ", Z: " + Z) endif endfunction ;-------------------------------------------------------------------- ; Display the send vertibird to settlement menu ;-------------------------------------------------------------------- function SendToMenu () NTRVertibirdActorScript VertibirdScript = VertibirdRef as NTRVertibirdActorScript NTRVertibirdMainScript MainRef = VertibirdScript.NTRVertibirdMain as NTRVertibirdMainScript Location TargetLoc = OpenWorkshopSettlementMenu ((MainRef.NTRVFT as NTRVFTQuestScript).NTRVertibirdTargetKW) if (TargetLoc) MainRef.StopAirSupportOnAlias (VertibirdRef) (VertibirdScript.NTRVFT as NTRVFTQuestScript).StopOnVertibirdAlias (VertibirdRef) VertibirdScript.EvaluatePackage () ;TargetLoc.SetLinkedRef (self, NTRVertibirdSettlementLocation) WorkshopParent.DisplayMessage (NTRVFTVertibirdTravelMessage, self, TargetLoc) endif endfunction ;-------------------------------------------------------------------- ; Transfers the vertibirds inventory to a workshop ; If no workshop is found - transfer to the player ;-------------------------------------------------------------------- ObjectReference function TransferItemsToWorkshop (ObjectReference akWorkshop = none) Debug.Trace ("Transfer items") if !(akWorkshop) if (WorkshopID != -1) akWorkshop = WorkshopParent.GetWorkshop (WorkshopID) else akWorkshop = Game.FindClosestReferenceOfType (WorkshopParent.GetWorkshop (0).GetBaseObject (), VertibirdRef.GetPositionX (), VertibirdRef.GetPositionY (), VertibirdRef.GetPositionZ (), MAXIMAL_WORKSHOP_DISTANCE) endif endif int Count = (GetItemCount () - 3) if (akWorkshop) VertibirdRef.RemoveAllItems (akWorkshop, true) if (Count > 0) NTRVertibirdWorkbenchTransferMessage.Show () endif ;Store items in players inventory if there werent any workshops else VertibirdRef.RemoveAllItems (Game.GetPlayer (), true) if (Count > 0) NTRVertibirdPlayerTransferMessage.Show () endif endif return (akWorkshop) endfunction function DismissPilot () AssignPilot (none) ;'Drop' pilot VertibirdRef.Disable () Enable () GoToState ("Workshop") Debug.Trace ("Pos - X: " + X + ", Y: " + Y + ", Z: " + Z) endfunction event Actor.OnDeath (Actor akSender, Actor akKiller) Debug.Trace ("OnDeath ()") if (akSender == VertibirdRef) NTRVertibirdActorScript Vertibird = VertibirdRef as NTRVertibirdActorScript NTRVFTQuestScript VFTQuestRef = Vertibird.NTRVFT as NTRVFTQuestScript NTRVertibirdWorkshopScript WorkshopVertibird = (Vertibird as ObjectReference) as NTRVertibirdWorkshopScript NTRVertibirdMainScript MainRef = Vertibird.NTRVertibirdMain as NTRVertibirdMainScript VFTQuestRef.StopOnVertibirdAlias (Vertibird) ;Stop VFT if it's the VFT Vertibird MainRef.StopAirSupportOnAlias (Vertibird) ;Stop air support if it's the air support Vertibird Disable () Vertibird.Disable () ;Find a workshop to 'resurrect' at ObjectReference WorkshopRef = WorkshopVertibird.TransferItemsToWorkshop () ;Get safe position from a temp marker ObjectReference WorkshopMarker float [] SafePoint if (WorkshopRef) WorkshopMarker = WorkshopRef.PlaceAtMe (VFTQuestRef.NTRVertibirdMarkerRef) else WorkshopMarker = PlaceAtMe (VFTQuestRef.NTRVertibirdMarkerRef) endif SafePoint = WorkshopMarker.GetSafePosition () WorkshopMarker.Delete () ;Delete marker - not needed anymore ;Disable pilot if he's still alive Actor Pilot = GetPilot () if (Pilot) if (Pilot.IsDead () == false) Pilot.Disable () endif endif ;'Respawn' (actually spawn a new form, because the old one is buggy after ressurect/reset...) Utility.WaitGameTime (RESPAWN_TIMER) VertibirdRef = PlaceAtMe (Vertibird.GetBaseObject (), 1, true, true) if (VertibirdRef) (VertibirdRef as NTRVertibirdActorScript).NTRVertibirdFurniture = self endif ;If safe point was found - teleport it there if (SafePoint) SetPosition (SafePoint [0], SafePoint [1], SafePoint [2]) endif ;Enable pilot if he's still alive and assign it to the new vertibird if (Pilot) if (Pilot.IsDead () == false) if (VertibirdRef) Pilot.MoveTo (VertibirdRef) AssignPilot (Pilot) endif Pilot.Enable () endif endif MainRef.RemoveVertibird (Vertibird) UnregisterForRemoteEvent (Vertibird, "OnDeath") Vertibird.Delete () ;In the end, delete the previous ref endif endevent ;---------------------------------------------------------- ; Handle vertibird death and resurrection ;---------------------------------------------------------- state Assigned event OnDistanceGreaterThan (ObjectReference akObj1, ObjectReference akObj2, float afDistance) Debug.Trace ("Distance became greater than 100!") MoveTo (VertibirdRef) endevent endstate auto state Workshop event OnDistanceGreaterThan (ObjectReference akObj1, ObjectReference akObj2, float afDistance) Debug.Trace ("Distance became greater than 100!") VertibirdRef.MoveTo (self) endevent ;-------------------------------------------------------------------- ; Handle workshop delete ;-------------------------------------------------------------------- function HandleDeletion () TransferItemsToWorkshop () ;Remove linked pilot Debug.Trace ("Remove pilot") if (GetPilot ()) AssignPilot (none) endif ((VertibirdRef as NTRVertibirdActorScript).NTRVertibirdMain as NTRVertibirdMainScript).RemoveVertibird (VertibirdRef) Parent.HandleDeletion () endfunction ;-------------------------------------------------------------------- ; Spawn the real vertibird ;-------------------------------------------------------------------- function HandleCreation (bool bNewlyBuilt = true) Parent.HandleCreation (bNewlyBuilt) if (bNewlyBuilt == true) AddKeyword (WorkshopParent.WorkshopWorkObject) ;To make it assignable - if you add it to the form you cannot build it VertibirdRef = PlaceAtMe (LvlNTRVertibird, 1, true, true) (VertibirdRef as NTRVertibirdActorScript).NTRVertibirdFurniture = self RegisterForRemoteEvent ((VertibirdRef as Actor), "OnDeath") RegisterForDistanceGreaterThanEvent (self, VertibirdRef, 100.00) endif endfunction endstate *edit* I see I posted it in the wrong subforum. Please move
×
×
  • Create New...