Announcement

Collapse
No announcement yet.

[PLUGIN] Savior 3

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    the Procedural interface tells the plugin that the class expects to be respawned at runtime by the plugin and it is waiting for slot data to be passed in to that actor once it has been respawned from Guid..

    1) The plugin will check if that Class + Guid already exists in level, if so then it passes the load data to the class to use with Load Actor : (Slot Data)
    2) If the result is that the current Class + Guid is still missing on level, then it will first tell the Game Thread to spawn an Actor of that Class, assign the missing Guid to it then go back to step 1.
    Last edited by BrUnO XaVIeR; 08-26-2020, 11:04 AM.
    | Savior | USQLite | FSM | Object Pool | Sound Occlusion | Property Transfer | Magic Nodes | MORE |

    Comment


      Thanks for the info. By any chance is there a way to set PlayerState to be persistent throughout the entire session?

      Comment


        It is an Actor, so when moving to another level you should try things such as "Seamless Travel" functions.
        You can find PlayerState API here.. take a look at functions that talk about "copy" properties:

        https://docs.unrealengine.com/en-US/...ate/index.html
        | Savior | USQLite | FSM | Object Pool | Sound Occlusion | Property Transfer | Magic Nodes | MORE |

        Comment


          Thanks, I've seen it, but I'm a "BP only guys" so unfortunately, I can't get much use of it. I already use seamless travel together with ServerTravel to change map, but PlayerState always gets dropped and respawned. Some folks whisper about the mysterious Persistent Actor List (or something like that). Is it something that can be reached via BP's, maybe?

          Comment


            I've never heard of any persistent actor list, sorry. The map will always spawn new actors when you replace persistent level.
            | Savior | USQLite | FSM | Object Pool | Sound Occlusion | Property Transfer | Magic Nodes | MORE |

            Comment


              Hm, I see. But what is the common flow for dragging data along through the levels in multiplayer? I mean the player specific data in co-op, not something that you can write in game instance. (pardon for sliding off topic from Savior a bit).

              Also I can't quite get the mechanism of GUID generation - Savior's node Create Once is generating a new GUID for PlayerState every time I start the game and that's why loading fails I guess. Is that intended?

              Comment


                This is why I told you to not use the generator node.. It's not intended to be used in case like this.
                You need to manually generate a persistent guid value instead.

                And PlayerState has CopyProperties() and ReceiveCopyProperties() functions
                https://docs.unrealengine.com/en-US/...ies/index.html
                https://docs.unrealengine.com/en-US/...ies/index.html
                | Savior | USQLite | FSM | Object Pool | Sound Occlusion | Property Transfer | Magic Nodes | MORE |

                Comment


                  Yeah, that's a bummer - I still need to generate a persistent GUID, but now I gotta figure out how to make it unique for each client's install

                  As for the CopyProperties - thanks for pointing it out, but so far I have no idea how to implement them, neither it's available in my PS blueprint (even though it should be from that link). Well, I guess I'll go bang my head against the wall a bit more

                  Comment


                    What you're trying to do should be tied to a player account and you should use something like Epic's Online Services.
                    | Savior | USQLite | FSM | Object Pool | Sound Occlusion | Property Transfer | Magic Nodes | MORE |

                    Comment


                      Yep, I've already thought that I'll need an external identification at some point to be able to tie all the stuff to a common profile.
                      Also CopyProperties override does not get called in multiplayer for some reason, only in single-player (in BP at least)

                      Comment


                        hi,
                        I followed the steps for animation BP.
                        I added interface serializable for pawn AnimBP but when I load it keeps remainingin the final animation state, means no saving happend also I check log and I can't see that pawn animation being saved. My game is 2d games I am using flipbook for sprites and there is also simple AI for pawn like moving, detect player etc.
                        one more questions ,
                        I have to add SGUID to actor and all their components, there is no event construction in components structure ,is it correct to make SGUID on "event beging play" for each component.
                        thanks in advanced

                        Comment


                          I have added support for directly saving and loading properties of Anim Instance Blueprints on spawned Characters;
                          Characters are pawns, but pawns are not characters.
                          I did not add support for pawn classes at all.


                          Your components only need guids if you have multiple instances of same component class on the same spawned actor blueprint.

                          Only "Save Game World" or "Save Actor Hierarchy" will save components list of an Actor, where a Guid for component is considered, otherwise you can manually just use "Save Component" function regardless of having a Guid or not.
                          | Savior | USQLite | FSM | Object Pool | Sound Occlusion | Property Transfer | Magic Nodes | MORE |

                          Comment


                            Originally posted by BrUnO XaVIeR View Post
                            I did not add support for pawn classes at all.
                            Why didn't you add support for pawns ?

                            Comment


                              Hi. I purchased your Savior plugin a couple months ago. I knew ahead of time that I would have to modify it a good bit to get it to work within my game. Anyhow I'm kind of merging it into my project partly because it helps me learn your code so I can familiarize myself with it and because I may not be the best programmer so it's just part of my learning in general. Anyhow. If you assume that I'm moving the plugin from being a plugin to a new cloned version of it but tucked directly into my project - I've run into an issue which is likely due to my lack of programming experience, and I was hoping you could help me because I've not be able to figure this out and I've been trying to problem solve it for some time now.

                              In the reflector.cpp there are several methods that utilize several static function directly from Savior2.h. ParseJSONtoUStructProperty uses SanitizePropertyID, and inside JSONToUProperty uses GT_NewObjectIntoSet. The problem is all related I'm sure in that in my copied version my reflector cannot see or access the functions in Savior2.h. It doesn't appear there is a direct header connection as Savior2.h references Reflector.h so it can't go the other way because of circular dependency, so I know programmers are going to laugh at me here but I'm guessing this is where some forward declaration is coming into play? maybe some friend class? I've been looking over this code forever now and I can't for the life of me figure out where you have this set and so I can't replicate it.

                              any chance you could tell me how you achieved this? I see that GT_NewObjectIntoSet get used in a FSimpleDelegateGraphTask::CreateAndDispatchWhenReady which I'm pretty new to but I believe it's a called on a thread and so I was worried if I move these methods to a local location (say inside of Reflector) that it would cause problems down the road. So instead I've been trying to figure out how you connected the dependent Reflector class to the Savior2.h and allowed it to access those Static functions. Any help is greatly appreciated. I'm just at my wits end with this for now.

                              Thanks in advance.

                              Comment


                                In plugin source it works because in Build.cs I make Savior2.h header public:
                                Code:
                                PublicIncludePaths.Add( Path.Combine( ModuleDirectory, "Public" ) );
                                And those helper functions for threading, they are static in global scope.
                                C++ will inline them even if I didn't ask for it, just like Unreal inlines collapsed graphs.
                                | Savior | USQLite | FSM | Object Pool | Sound Occlusion | Property Transfer | Magic Nodes | MORE |

                                Comment

                                Working...
                                X