[RELEASED] [SUPPORT] Moore's RPG Template

Thank you

I started that course and started over with a new project start, I found trying to add the xtra’s to a child, it did not seem to cary through all the data, I did how ever get it working by editing the default character (not the best method as you said) the only issue seems to be the third person camera, it’s locked and has NO movment via the mouse. I can zoom in and out but thats it

Will try do the child option over again see if I missed somit

I’ll document the whole procedure to add the third person controls within the user guide very soon.

Thank you very much

Hi. I had deleted the update partical blueprint inside the Niagara system and now i cant get any of the particals to spawn properly or at all. i was woundering if you had a screenshot of this blueprint.

Hi there (David?).

Which Niagara system or emitter would you like a screenshot from? By the way , you can alternatively create a new project and then open it up to see what it all starts with.

Best regards,
James

[USER=“909050”]Moore Game Dev[/USER] - Awesome pack, just got it integrated into the Advance Locomotion Pack v4, works great.

You mentioned on my question on the Marketplace page that you’d implement multiplayer if I bought and requested it, so I’m just posting to request that officially. Seems like a good bit of work though and I’m in no rush.

One thing I do think could be improved on is moving all the kit functionality from the player controller into a helper component with an interface that can be implemented into the player controller to call its functions, so that the UI isn’t tightly coupled to the player controller class, but that’s a good bit of a rework.

Anyhow, great kit, thanks so much for releasing it!

BTW, I made a quick modification to the default style of ProgressBar so that the middle bar can fill from the center. Unfortunately the default FillFromCenter behavior cuts the bar in half in the Y axis. I had to actually copy the entire SProgressBar and UProgressBar class because of the way it’s designed since it uses the SProgressBar as a member variable in the UProgressBar class, unfortunately.

Here’s a video of it in action.

Interesting behaviour. So is this video showing your desired behaviour or would you prefer it to behave differently? I think it should behave the old way. Ya know, fill from the left end towards the right end. If you keep it like this then wouldnt it cause difficulty for the player to determine how much health is left?

Sorry about the delay in responding. Yes I think it makes sense to separate the code out from PlayerController into new class. But I’m not sure whether it would help that much. Would it? Doesnt everyone use the PlayerController class?

Yup this is the desired behavior how I wanted it. I like the way it looks balanced in terms of the way the left side goes from left to right, right side from right to left, and the middle fills from the center.

It’s exactly the same way Skyrim’s bars work (just rechecked to make sure) - left hand bar fills left to right, middle bar fills from center, right bar fills right to left. I will probably have to change the way the background of the bars look in order to make it a little easier to tell when it’s not full, though.

Some people indeed don’t like the way the healthbar operates in Skyrim, though, and I might make it an optional thing, but if I do I’ll probably have an option to relocate the bars so they’re all on one side or the other.

Well some people might have a different PlayerController class. What the interface method gets you is that you don’t need to have the UI classes know about a specific PlayerController class (due to the Cast node).

Basically in the UI widgets it would just use a generic PlayerController reference rather than a specific BP reference, and use the Interface message system to call into the Interface-implemented functions on the user’s PlayerController class by passing in the general base PlayerController reference, as long as whatever class it actually is implements the interface.

This would essentially make the work of setting it up on a different PlayerController class a lot easier because it makes it so you don’t have to go into the RPGUIKit Player Controller, copy all the variables and functions, then fix the references in each UI widget, then fix all the calls to call the new class’s version.

All that said, as I mentioned it’s not a huge deal, but for newer users it would probably find it easier to use the kit on a custom/existing PlayerController (e.g., if like in my case, they want to use it with, say, the Advanced Locomotion System) if they don’t already have experience doing the sort of merging that the current setup requires, since they’d just have to instead add the interface, then hook up the interface functions to the BP component with the functionality.

It’s also just one of the “right” ways to handle this sort of thing in OO design, so that there isn’t a tight coupling between classes (in this case, the specific PlayerController class and the UI widget classes). But the ease of use is the real win. If you want some help or advice on how to set it up just let me know and we can get on Discord to discuss it.

Hi [USER=“909050”]Moore Game Dev[/USER] !

Not sure how often you check this but I just started messing with the system today. I noticed that if you kill the bandit before accepting the quest from Bob than you’ll never be able to complete his quest. Where in the BPs does it check to see if something has been completed (I’m still digging around)? I tried changing the prereqs on the quest table but it didn’t seem to make any difference. Since the bandit has a specific ID, I figured I could run a check on that ID if the NPC is alive or dead right after accepting the quest. Also, I see there are checks on whether or not the hero can buy items, but nothing on selling them. I was looking to make quest items unsellable.

EDIT: I was able to prevent the trader from buying quest items. Apologies for jumping the gun.

Hiya cveedub,

When the bandit is killed (when you press the E key up close to him) , the Event Interact event is triggered on the Event Graph of the BP_NPC_Enemy blueprint which does a few things like set his status to *Dead *and turn him into a ragdoll, then it calls the function *NPCDefeated *in the BP_RPGUIKit_PlayerController bp. The *NPCDefeated *function checks all current (uncompleted) *QuestObjectives the player has *and looks for the bandit’s NPC ID number and if found then sets that *QuestObjective row *to Completed (well actually it calls yet another function to do that last bit, called SetQuestObjectiveToCompleted).

I suppose that one way you, or I, could handle this situation, whereby the bandit is killed before we start the quest, is to respawn the bandit at the point of getting the quest.

Or another way you could handle it is to make the quest unavailable when you kill the bandit so that when your char talks to the *BP_NPC_QuestGiver *, the function *InitializeQuests , *that is executed when you do that, checks the status of the bandit, and if he is dead, then the *OpenQuestHUD *function should not get called, but it should open the HUD if he is alive. To check all actors’ statuses you could call the built in function *GetAllActorsWithInterface *(set the Interface to Interface_Interactable) built in function, then loop through them and Cast To BP_NPC_Enemy and compare their ID with the ID from the BP_QuestGiver_NPC. If there is a match then get the status variable from the NPC and checks its value for *Alive *or Dead.

If you decide to spawn him then you would also have to unspawn (destroy actor) when he dies too. Probably after 30 seconds or similar.

If you unspawn him then you could do it in a fancy way, such as making a Niagara effect that makes him melt into the ground or turn into smoke and ashes and blows away in the wind…

Got any other ideas how it could be handled?

Best regards,
James

Thanks, James! Really appreciate the response on this, let me have a go at the blueprint and see if I can come up with something. Similarly to this though, in a future iteration you may consider adding a function that does an inventory check after a quest is issued. With regard to the apple quest, if I go pick the apples before hand, the quest system doesn’t see them in my inventory and only recognizes what I add after taking on the quest. I’ll also look into storing a location visited array and checking against that when the quest giver asks me to go someplace.

All this aside, you’ve made a wonderful kit that has some many possibilities to expand and an incredible foundation to start from.

Thanks I’ll definitely include this inventory check in a future update. I suppose its going to be debatable about how much functionality should be provided (out of the box) or left to the buyer to develop. But there is surely room for some additional functionality in the quest area.

You’re absolutely correct about functionality! For the price, you’ve already gone above and beyond, imo.

So I have it working, sort of. I store an array of enemies killed in the player controller, only when NPCDefeated is called (add unique to the EnemyKilled array), then when ever you interact with a quest giver it calls RecheckDefeated, which again calls the NPCDefeated function and passes in each ID from the EnemyKilled array. I haven’t thoroughly tested it against other Enemy NPC and other quest givers to ensure there isn’t any mix up, but with only one enemy and one kill quest giver it works. I’m not sure how scalable it is though so I would imagine I would need to clear out that entry into the array after the entire quest is completed.

Similarly though, if I already pick up the bandit sword, Bob doesn’t know I have it, so will need to build out the inventory check function.

Nice solution there. It should scale up fine as long as all your NPCs have a unique ID.

Best regards,
James

[USER=“909050”]Moore Game Dev[/USER] Hi James! The hit scan for interaction doesn’t function when you’re in third person. Any recommendations on how to solve this? Currently, the Send Message to Screen node in Process tick isn’t hooked up for the message variable, if I populate it with anything, it always stays on screen because, I’m assuming, the camera is hitting my back when in 3rd person. Or just because it have it hard coded lol

[USER=“909050”]Moore Game Dev[/USER] I solved it, mate. My bad. I have a bad habit of asking for help and figuring it out 6 minutes later. I just changed to scan from the FP cam and attached an arrow to the TP cam and updated Get Object Name Over Cross Hair to use the arrow, plus some updates to the branches in the Process Tick.

you are awesome :slight_smile:

Does anyone know where is a list of quests in editor?
I can’t find it. There is also no information about adding/editing quests in editor.

I see NPC ID field on quest giver in Details but I don’t see the place where are actual quests declared for him (so when I select quest giver I don’t see the list of quests assigned to him)…