#blueprint
402296 messages · Page 854 of 403
I wonder, why check for implementation?
Event Dispatcher is the blueprint word for Delegate, not the same thing as an Event, which is the blueprint word for a function with no return value.
Interface called on an actor that has no implementation will do nothing afaik
thanks 🙂
I'm basically trying to have multiple cards that when stood on create widgets with several options (some will damage the player etc) it's confusing for a beginner. I can apply the damage using the interface no problems, but cannot seem to link it to a widget UI.
Are interfaces the correct way of going about this?
One message removed from a suspended account.
Probably not much need for interfaces. Just a layer of complication. All you really need to do is show the UI when stood on. And have the widget's click call GetPlayerPawn and cast to your character class to do what you need.
One message removed from a suspended account.
My thought with interface was I want multiple cards of the same 'type' but with different attributes
Like Enemy 3, Enemy 4 - etc
Hi guys, is there anyway for me to script Create Asset, and then Assign value to the Asset property?
I try to get the output of Create Asset, cast to the the type but for some reason it is always null.
Interfaces allow you to use lower level pointer types to call same functions on multiple class types that have no similar inheritance. Like interacting with things when pressing F while looking at them can open a door, open an NPC dialog, open a trading menu, light a torch, etc. If you have a similar base class you can cast to, interfaces are indirect and pointless and just add extra complexity where you don't need.
Thank you - a lot of this goes over my head, but I think I get your understanding. How would I add variety to cards(but more importantly - ) how would I access them just by overlapping them with the player pawn? I would like maybe 3 types, and 20 - 30 variations of each.
I didn't want to have to create widgets for each different card
Procedural widgets, inheritance from base class, and functions to retrieve the information you need mostly
Or fetching data through a DB with a gameplaytag 😄
Gameplay tag is always the answer x)
You start with class hierarchy. Create a card base. Put inheritable functions in it. Then any child of this can implement those functions to do what they need. Add properties to the original type that you want to display in the widget. Children can set these.
You only need one to three depending on the differences in your variations. Widget can retrieve data through the base class and call functions through the base class.
Showing while overlapping can be done through a widget component and a trigger box on a single actor.
So for 'Enemy' (for exmaple) create a parent card base (with the mesh, box collider, material etc) and create functions like 'Damage Player' then just create multiple children of this one and change like damage amount?
Enemy_Child_Damage_2, Enemy_Child_Damage3, etc?
That makes a lot of sense, and kind of what I was trying to do but clearly going in the wrong direction
Not even sure I'd create multiple children for that. One class can do that and get the damage it needs from a datatable.
I looked at that and didn't know if I was going to open a can of works with data tables etc 😂 It's a vertical slice of a game so I am not too worried about performance or randomisation.
More proof of concept initially
This way I can sort of falsify a run through by placing them in whatever order I choose I suppose?
Either way works. Child classes are probably simpler, but much less scalable and not as correct. I'd strongly encourage learning to use datatables or data assets though. They're extremely cornerstone to game design.
It's definitely on the to do list! Do you have any examples of creating widgets using the base class and pulling data from the overlapped actor? Like won't it always apply the Damage amount set in the parent class rather than the one I am currently stood on? Is that where get all overlapping actors comes into play?
I just can't visualise how to pull data from the class I'm stood on rather than the parent (if that makes sense)
from the actor im stood on sorry, not the class.
The class of actor you're standing on is the parent as well as the child. Children override parent's settings.
Ah - right. So would I still need a GetOverlappingActors node at all?
I think I get it, all the functionality in the parent class then just alter attributes in the children themselves
Depends. If your card is just supposed to damage the player character, you don't need to do anything except call GetPlayerPawn in the widget and cast it to your character type.
Can do the same thing in the actor too, either way.
I'd like a user interface to display options like Option 1 - Take # damage (damage amount for that specific enemy) and Option 2 - Flee. Sort of like a rogue like card crawler, I guess.
Hello everyone
I'm here again
just wanna ask if you have good way to encrypt a string
for example using the method of FRSA
but I dont know how to use it
anybody helps me?
Its nice of you to help me last time
this time I need to encrypt something UE receives from remote server
for example the password
but I dont know which tool to use
Now I have realized that the threshold of UE development is very very high
not only do you have to learn C++ and blueprint
but also you need to know everything of development
connecting to the remote server, access to data, callback and so on
for example, I have password 123
and it stores as string
in UE
how do you encrypt it to something
I even dont know how to manipulate FRSA
I receive some string from server
how do I make it look like a messy string
for example the string 123
it is just a string
containing numbers and dots and maybe letters
hide the string
thats the purpose
if anybody see that string
they dont know the original one
only for users
thats ok
just give me an example
is there built-in method
I just wanna use API
Copyright Epic Games, Inc. All Rights Reserved.
its C++ API
can you teach me to enncrypt
yes
but how
I dont know how to write C++ related to this
I know how to expose to bp
this is a structure
I only know function
and I can write function
🍿
ok maybe its too difficult for you to help me
You're gonna earn a snarky comment from Lorash in no time.
@whole coral if you want help asking would definitely help, also there's a specific #cpp channel.
there are no More "Normal Floats" in Ue5, or? only can find Real
but i cant find them anywhere, I only see this, and , even when i Search for Double etc i only can See Real
preview
Epic Games Launcher
so 1, i guess
You are an Wise Main Bro, you should get an Super Helper Medal for this DC, im update now 😄
Hi and thanks. Did you mean something like this?
Anyone know what's up with this? You can see in the left the selected actor has a light component, but in the component details you can't see it? Do I just have to recreate this actor?
No You had it correct before, you just needed to select the classes.
hello! How do you get a level sequence to always play from the start, even if the play head is not at the start in the editor?
well actually recreated the actor and the rect light still won't show up... is this just a corrupted BP now...
I hope some of you are up at this hour. anyway I have a Line Trace that I use to interact when pick ups and so on. I wanted to use the same line trace for opening widgets like for a chest or a crate or even a vehicle. The issue that it fails when I try and close the widget. It seems that it fails from the Interface that I use to call the actor of the object (Like a chest or Crate). I haven't been able to find any thing related to this issue on here or on google or youtube. So I'm thinking that this just doesn't work like this. So my question is. How can I use the same Inputaction E key to do everything. The pickups work. I just can't interact with a chest. anyone have an idea on how to set this up. I even tried using an overlap.
Hi, Thanks for your kind help. If this is correct there must be something still wrong: -( Unfortunate If I choose between character 1 or 2 it still plays the same character. I will look into it some other time.
thank you. i'll try that
@trim matrix Thank you so Mush, It works. I can now open and close my Chests and Crates. Thank you. I have spend so much time on this. It was driving me nuts. And you fixed it in 1 one. I wish some else would have told me the same thing. Thanks again
You need to use the variable for spawning by overriding the spawn player event in the gamemode
Any idea why it show my transform widget as a line instead of a point in the world scene ?
do you have fit to size enabled?
Sorry let me rephrase this , with widget i meant the Variable Show 3D Widget , not the class widget. my bad
that looks like a UE5 thing
I'd ask in the UE5 section
never seen that before in UE4
Didnt know that , i created a transform variable set it to instance editable , enabled the 3D Widget so i can get its world position in the world .
Ok theres something Curious, with an Async Load from Slot, nothing works, but with an Normal Load from Slot, it does, but as i saw from the Documentation, Async is better and doesnt Block the Game Thread, but is there something i miss, or just buggy?
async will take a while to load. it's not instant
Bro its 4 KB,
Nothing is Happening, but probably because i saved it Normal, When i want to Use Async, im need to Save Async too?
Show some code
If you do like me with async nodes and use the wrong pin, they wont work 😂
async could get interrupted if there's a transition but otherwise no
mhh thats really weird
Well i was trying, all with Branch COndition, whitout, with Completed, with just execute, all nothing works
what are you actually saving though?
and its just 4 Kb
I see a struct array
For now just, Unique-ID's in an array
are you sure that that struct array isn't 0
yes Bro
Yes nothing is empty all Works Quite well with Normal Load from game slot
but if i Use Async all is Empty, nothing will be loaded
Its just it Works Quite Well with Normal Load, but i want to Know why nothing is happening
have you tried to load directly after async has completed?
you Mean the Completed Execute?
yes
Yes
so save async, load immediately after, breakpoint
ah yes
i already was trying, and now again, its just empty
Not working
and its just 4 KB atm
so Normal Load instantly(lol sad when not), but Async does nothing
I do already, but its the same
and its saved, https://puu.sh/INIlZ/edf7a39102.png, like as i said Normal Load works flawlessy
just the Completed execute?, or Completed, and after than Success Branch?
completed pin
Not Working, got anyone working this on Preview?
ask in the UE5 section perhaps, UE5 is a beta version
mhh i tried again and its Working with Normal Load-> https://puu.sh/INIoM/61e6a98c7e.png
yeah i will try thanks
I'm too sleepy to do sanity check on that in UE4
Well im just stay for now for Normal Loading then
Sounds smart 😅
Yeah but i readed in Documentation u should use Async, so i wanted to learn it right 
Also in regards to your comment about it being better, that really depends.
Copy from Doc's
Async Save Game To Slot is the recommended way to save your game, due to its ability to avoid hitches even when saving larger amounts of data. However, if your savegame data is small, or if you are saving from a menu or pause screen, you can save the game with the Save Game To Slot node, shown below, instead.
Yeah. Still depends on circumstances. Async saves can have issues too.
Well the Main Thing is, for Dialogues idc, but on Other Databases i have, Images that are Converting to Bytes, so u can save it with the Savegame, and than can be grow really Large, on Importet Runtime Textures, and i saw on Files like 10 MB; its really an Hitch and like its Freezing on loading
I think I'm misunderstanding what you're trying to do. Those aren't things you normally serialize in a savegame file.
Well i try to Create an own Concepting Programm like Articy Draft, so its More an Software Program than an Game thats why
Ik you only can Save the Path, but for something like that i think its better do have Pictures directly in Save Database
Knowing how large texture files tend to be, that's going to be a massive database at some point.
Yeah i know thats why im splitting it, and it working Good with Pict with < 1 MB = , so Yeah , thats why i wanted to learn Async, because at some point it can be Really Huge.
Hmm. Not sure about UE5. But UE4 Asyncs are working fine.
Hey newbie here, i am trying to animate the playercontroller and struggling abit. I want this animation to play once after pressing F. Tried with a controller pitch input and sequencer but still got trouble making it work.
That's not how you animate player camera...
okay! got any suggestions maybe?
I'd recommend rotating the camera in BP or using full body animations
yeah thats what im thinking too but im not really sure how 😒 rotating camera in bp*
does anyone know how you can make physics bodies of a static mesh simulate separately completely unconstrained?
Timelines can be handy
Uh, what would that look like? Which body does the visual mesh go along with?
You probably want a skeletal mesh or multiple static meshes.
ah sorry I meant of a skeletal mesh
I didn't notice I typed static instead of skeletal
🤦🏻♂️
thanks then ill look into it.
basically when the head is hit it explodes and is hidden the floating things should fall on their own but for some reason they do very weird things
I don't have any that's what's weird
"Do very weird things" isn't very helpful. Show it. Also confirm that each bit has its own bone.
this is the (quite terrible) skeleton it has
I mean show it doing the weird thing
the arrows are a whole other issue but well
the side parts seem to be floating around the center even though they should be dropping on their own
and they even ignore collision with the ground
Yeah, i believe that, Preview is still preview, soo..
There is a high chance it hasn't been touched. That's a pretty core system that has to work with multiple existing systems.
Hello, on the node "Event ActorBeginOverlap" What would happen when 2 actors at the exact same time trigger this overlap? Would it fire for each or would it skip one?
pretty sure that's not going to work with save to slot
you'd need to save at editor time, not runtime. I'm not even sure async is working at editor time
In computer computation there is no such thing as exact same time. One thing always runs before the other even if imperceptible to a human. Logic happens one line at a time. In fact in the frame there are likely thousands of things happening between one character's overlap to another character's overlap.
so do you have any idea why it seems constrained even though it's not? (sorry for the ping if you're busy)
is there a way to make part of my HUD invisible if i pick up an item ingame?
yes
how so? couldnt get it to work with an interface
I don't know how you imagined it to work with an interface
yea thats kinda the problem cause there 3 objects interacting and an interface only workks with 2 i think
but if you have a player controller you can construct the widget in the controller, then setup an event dispatcher for item pickups on the player character
I don't know what you've been told about interfaces, but it's probably wrong
you can always show your code if you're in doubt
@trim matrix Generally speaking. I want to give you a heads up about learning in Unreal. You're going to hear a lot of stupid advice about interfaces and why you should use them over casting etc etc. Basically, you should entirely ignore this. There are literally no good reasons to use an interface except for the few small niche places where they're useful.
you should use interfaces!!! (where necessary)
If in doubt, always test the code
I hate soo much when i accidentally doubleClick on a Node and it starts opening the Entire Project on VS
Ben, I hope that's in jest. :/ Or I kee u.
You'll find the good practices as you go along and battle test the code you made in game.
Fast prototyping is in large part what BPs are about.
I personally did some stuff in the past that someone and myself nowadays would cringe hard on.
For me, BP is all about them easy bindings, async calls, and easy ability to specify assets. 😄
yea im constantly checking my code aswell otherwise i'd be fked anyway haha
interfaces do implicit static casts anyway, and have a vtable lookup so it's kind of pointless
bp cast is a static cast
Not sure what that Create Event node is for
but interfaces don't load a whole class?!
is this in the player controller? you'll need to use a Bind event
do make a bar and some text in the hud disappear
Usually one would save the return value from Create Widget into reference variable
yea @odd ember
moot point, objects in bp are already fully loaded
the hard reference you get is an extra pointer to your object
if you think that's the end of the world over a vtable lookup and less code reuse
I don't know what to tell you
can you show your code for where your player character picks up stuff?
thats a bit complicated i guess
i have an event for when the character hits a certain object of class on tool impact which has an interface in it
which commincates with the specific object i hit with my tool from that class if that makes sence
it would make more sense to screenshot it
yea makes sense, but sounds a bit weird
usually on the object you would have some onHit event and pass what did hit it
essentially what you want to do is have a dispatcher that gets called on object pickup. then have the player controller or widget respond to that (depending on where you want to do widget management)
That question can get pretty deep depending on if you want a cheap/shitty 1 off version of this or something more robust.
Why is the hud hidden, is that a state like WoW's In A Vehicle?
It can be as simple as making a HidePartOfHUD event in the character/pawn/controller and having it called when the item is picked up. That's crappy but it'll work.
Myabe you want something like the wow windows when you step on a loot and shows all the items inside the loot and want them to dissappear when you pick each one?
@peak wedge hope that has it all
in which class is the inputaction swing located?
character
@trim matrixIn plain english, what mechanic are you trying to implement?
X happens when character does X?
your code isn't very readable
i have a stamina health and shield bar
i want the shield to be invisible when starting the game and visible when i pick up an item
but like I said, in your character, create an event dispatcher you can call something like OnItemPickup
Is it visible when you pick up an item or is it visible when you have a shield or Shield is > 0?
What's the general rule here, shield bar is visible when _______?
its invisible by default and acts as an upgrade
Because it sounds like what you're after is that the bar is visible when the character has SOME amount of shield
so the bar appears as i pick it up
then in the player controller or in the widget itself you can bind OnItemPickup to get an event that you can use in that class
nah once you picked it up the bar stays on
Can you get rid of the item?
I'm trying to figure out if this is a STATE or just a trigger, like how you don't know you have a shield in Halo during the tutorial until you get it.
just a trigger i think
it goes over the health and when its empty the health goes down
And does it fill back up? Or is it gone
it fills up when the health is higher than max
It sounds like you should just have your trigger to show the shield be when MaxShield > 0
Character starts with
MaxHP = 100
MaxShield = 0
or whatever
and picking up the item adds 100 to MaxShield
yea true but i dont want to have an empty shield bar when the game starts
Having the shield is a state, make it stateful
You can either have the widget hide itself when MaxShield <= 0 or do the check for whether or not to show the shield bar whenever MaxShield is changed.
I would sure as fuck not have an item talking to the UI, all the item does is enable or add to MaxShield.
That would be like having a damage effect talk to the HP Bar. It doesn't do that, it modifies HP and the bar responds to the HP state.
The shield bar either has to poll per frame for the shield values or be notified when the shield values change. Either way, that's where it should be checking for MaxShield to know if it should even be visible
or bHasShield or whatever, however you wanna do it
I still haven't figured out what's causing this if anyone has an idea 🥲
thats a good point @faint pasture
Start with making SURE that it's landing on something that should be blocking every body. check all the colliders collision settings
yea if maxshield is 0 i want it to be hidden
that'd be perfect
i have maxshield variable in the character
yup this is the floor collision
Well i create all dynamically at runtime, and save so its work with save to slot
so far
If it's multiplayer, use RepNotify to handle the state changes. If it's singleplayer, just make a function/event for changing the variable and use that, or check on tick if it's polling.
and when it ragdolls the skeletal mesh simulates physics
basically your MaxShield setter can just call ShouldShowShieldUI or whatever
how can i access the variable within the hud tho? @faint pasture
i have a variable in the character but im not sure how to get that into the widget graph
I am trying to have ants walk around and drop pheromones for paths to food and such, How can I store these values across the landscape?
Help: made this to change between player1 to player2 with a button press, but once the button has been pressed, it changes to the other player2 but pressing it again won’t go back to P1, any help?
Heatmap?
Sounds like you've picked the wrong class to find, or destroyed the original pawn.
What should i do?
Pick the correct class, or not destroy the pawn.
I got 2070super why its working so high ?
Free framerate?
If you can rule out those. I'd assume that it's some odd weirdness with VR pawns.
Ue5
i think i fixed my issue
will be back if i get stuck again, thanks @odd ember and @faint pasture
@odd ember just dragging off of the create widget return note and casting to its children works, since now i can just edit everything within the character
Delete or unhook the Get node until it's grey and redo it.
I need help with collision but i'm not even sure how to start asking
basically I need a projectiles class that hits everything, a pawn class that gets hit by everything, and a shield class that also gets hit by everything. What collisions should be checked for this? it seems when i put them all to block all that the projectiles still just pass right through shields and static objects
i'm definitely doing something wrong but I can't figure out where the issue is
probably should make custom object types
that looks exactly like what I needed, just didn't know what to search for, thanks
@maiden wadi ok so it works and i tried it, i can change back and fourth, but changing from p1 to p2 then p1 again
P1 nothing works, meaning the buttons just don’t work
You have to remake that Get copy node to fix that error.
And you're saying that you can go back to original pawn now but the buttons in the pawn aren't working?
Exactly
Odd. Sounds like VR Weirdness. I've never once had that issue with a simple possession call
Unless there’s something I’m missing out
Possession is pretty straight forward. It's a single call. So unless your input events are weird, or you've done something in a post posession event, I'm unsure.
I'd start with some prints in your inputs in the pawn. Maybe override the Possessed events and print there, see if they're actually running in your pawn class.
So I made three new channels for collision, Pawn, Shield, and Projectile. All of them are block all but projectiles are just moving through the shields
Three things are necessary for collision. Channel settings. Enabled, and collision actually existing on the mesh or collision primitives generated for it.
enabled means "generates hit events"?
Why this causes infinity loop? https://gyazo.com/ffa036933225c5e500b72b2c9ebf7ea9
Enabled meaning SetCollisionEnabled=true. SimulationGenerateHitEvents is only related to a static mesh that is set to simulate physics. Completely irrelevant for a normal static mesh or one moved in an actor via a movement component.
What is the size of this table?
about 4k rows
Trying to sort with double loops
yeah i'm straight buggin on this collision stuff. why does it change the projectile movement? just turning on simulate physics causes it to just spawn in place until i hit it with a character...
Blueprint catcher for infinite loops defaults to about 500,000. 4,000x4,000=16,000,000. Even removing a line each iteration is probably still a little bit above that. 😄
Any idea why kill z doesnt kill my pawn when it drops out of level ?
Good to know. Any alternative>
You can maybe try dropping that second loop into a function of it's own. That sometimes helps. But probably not. Blueprint just doesn't handle that kind of loop count well.
Has anyone else noticed that the control rig component seems to break physics for the skeletal mesh? It simply won't simulate when the component is active. If anyone knows a work around that'd be great
So I assume C++ is the way to sort
Most likely. But what is this loop for?
Iterating over a whole table that many times probably might not be necessary.
Trying to sort based on a specific row. i.e. item-type
Datatable data in an array. You know how you sort tables in web apps based on column header. When you click on a column header and it sorts based on that.
i.e. Name, Category, Address. You click on Category, it sorts the data based on category in alphabetical order.
Oof. Yeah. Simple operation, but in BP that's going to be super fucking annoying.
Is your struct in C++ already?
Nothing in C++ yet. I will move the critical parts to c++ only.
I wanted to see how far I can do this using BP only.
Yeah. I'd consider moving the struct to C++. you can literally sort the whole array with a single line predicate function.
One message removed from a suspended account.
how that single line looks like>
have you considered #animation ?
before loop: have a local variable called HighestFloat, set to 0
inside loop: if (CurrentFloat >= HighestFloat) HighestFloat = CurrentFloat
after loop: return HighestFloat
More or less this. Then you can use TableRowNames to update your widgets or whatever.
TArray<FName> TableRowNames = MyTable->GetRowNames();
TableRowNames.Sort([MyTable](const FName& Lhs, const FName& Rhs)
{
const FMyDataStruct* LhsData = MyTable->FindRow<FMyDataStruct>(Lhs, "");
const FMyDataStruct* RhsData = MyTable->FindRow<FMyDataStruct>(Rhs, "");
return LhsData->ItemName.CompareTo(RhsData->ItemName) > 0;
});```
hey that's more than one line 🤔
TableRowNames.Sort([MyTable](const FName& Lhs, const FName& Rhs) { const FMyDataStruct* LhsData = MyTable->FindRow<FMyDataStruct>(Lhs, ""); const FMyDataStruct* RhsData = MyTable->FindRow<FMyDataStruct>(Rhs, ""); return LhsData->ItemName.CompareTo(RhsData->ItemName) > 0; });
Fixed.
write entire classes in a single line
C++ doesn't require spaces! Why should you!
I know right, it's a waste of space
From where? It's not part of the actor.
There's two places where you can edit default values like that on an actor
One of them does that where it collapses, the other one doesn't
I don't remember the specifics for which one was where though :P
Further to @earnest tangle's suggestion, if you have the variable selected in the list of variables when making changes to the structure, that's when it'll collapse. If you select the variable while it's placed in the graph, then it won't.
You could just add a bunch of structures first, then put data in.
I'm currently moving some of my complicated configuration structs into data assets :P
Daym, nifty hack if ever i saw one ! Super annoying how it collapses 😂
Been struggling with them for years
I think the other one where it didn't collapse was the right side editor if you go into class defaults :P
but it might be for same reason as Datura's suggestion above since it technically isn't selecting the variable if you edit it there
Yeah and it prob reconstruct the panel when a new default value is set (?)
partially so it's easier to share the same data with multiple actors, partially out of fear of blueprint corruption lol
It's a bit easier to manage the data as individual assets as well
Yeah, it depends on what sorta data it is... mine is basically animation configurations for sprite animations and related metadata
So having it as a standalone asset makes sense, similar to skeletal mesh animations and such
Hello,
i have an Actor with a triggerbox, when i use "get overlapping actors" it returns the actor it is attached to and not the one it is overlapping. Anyone knows why? Thx
does anyone know if timers are callable from "call in editor" functions?
I am trying to set one up and i can see it's executing the timer node, but the timer event itself never does
just to be clear, i'm calling an event in the event graph from the function itself. the event graph event tries to run the timer
(i know that timers can't be created in a function, just getting that out of the way)
No a timer will not work with call from editor
I’m not sure where you got this idea, you can create timers from functions.
Are you talking about a proper timer?
That uses a TimerHandle?
Given this is blueprints, I'm gonna assume they mean Timelines? If I recall a function can't do things asynchronously, meaning no timelines, delays or anything of that nature?
Yes that is what I believe he means, either a timeline or a delay
None of that will work inside a function or with CallFromEditor
fwiw, it is possible to set a timer from a function :) you need to either use set timer by function name, or use set timer by event + create event node
Although if you use a proper timer, you can create that inside a function
(the create event version is probably more robust)
sorry, yeah, i meant a timer in a blueprint function
someone can help
i have character 2d
and i can't go up or down
For W i set 1 and for S i set -1
and doesn't work
but thank you for the info. good to know that that CallFromEditor doesn't allow it either. at least I wasn't doing anything to cause it not to work
yeah, that's what i meant.. you can set those up inside a bp function?
Yes
@tight pollen is gravity enabled on your character?
Okay need some help with a GameMode order of operation. How can I get something to happen before the Host player triggers OnPostLogin event?
I want the BeginPlay stuff to happen before any OnPostLogin so all player faction data should be at the end of the array.
Instead the host player is getting put right to the front and the other players are working as intended.
when jumping
yes is enabled
Hello guys, I am trying to get 2 different procedural mesh actors after I slice one procedural mesh actor. Basically I want to chop a wood actor and create other 2 wood actor with other half. How can I do that, is it possible to implement other half into another actor? can anyone help me about that?
IDK what happened but my editor layout becomes like this every time I switched from UI Designer view to graph view
If you're trying to jump then you wanna use the "jump" or "launch character" node.
Add input would be if you were walking towards the top of the screen and you'd turn gravity off or constantly be pulled back down
Has anyone done this skill system before https://www.youtube.com/watch?v=0J6Ab3lmTEA
Support the channel through donations. Crypto accepted!
PayPal: https://paypal.me/reidschannel?locale.x=en_US
Patreon: https://www.patreon.com/reidschannel
Bitcoin: 1JFwWHr4X6uAeoZadukzqKjzFBj3Qjy7Sk
Ethereum: 0x2B2Bc108F1Cc0fF899959dEF3226637787d8C3dE
Dogecoin: DNQ33YnhpWoTBokBNVkZP5ub8KTLkpyjpv
Join our community discord!
Discord: https://dis...
is there a way to generate a somewhat unique integer id?
Ok, well I guess not. I need a new skill tree that uses more the 1 point to unlock skills. and I need a way to save it. when the player unlocks a skill. That skill needs to be saved and loaded in when the game starts.
Might as well just +1 each time an id is created
I would go like * 10 + 10 and that should make a better ID @long whale
Thanks. I store the id on server in game mode
ok, cool
I'm working on a multiplayer inventory. When the player uses one item, want to make sure the sent item info structure matches the server.
especially after a drag and drop
I wish I could get my On Drop working. lol
anyone want to help in making a skill system
i'm making my own currently so i might be able to help
but i'm nowhere near good at this. what do you need
well I have put it together with nodes and pins I have from other tutorials. I just have a hard time getting the On Drop To Work. I have a node Called Move Item. In my On Drop. It uses other nodes to do it thing. and well they are just too advance for me to figure them out. @unborn compass
Then quit following tutorials and try to do something small on your own.
When I drop something into the Back pack or from the backpack to the players inventory. Just doesn't work like it should
lol, I have. That's where all the code came from. when it comes to inventories. I have a hard time under standing it.
Any ideas on how to do a simple projectile ricochet like the old Unreal Tournament 1999 ripper weapon?
Just let it bounce, projectile movement component has that
Doesn't that only work if it's physics enabled projectile? @faint pasture
anyone have a easy way to find the velocity of a component and then translate that into a single speed float?
Projectile movement component has bouncing
Idk if there's anything built in but you can calculate it from velocity and angular velocity of parent
i want to scale my rotation input based on the speed of the vehicle, but i need to find the relative forward speed of the vehicle
Or just check position vs last frame position
@late shuttlethanks ❤️
Dot product vehicle velocity and vehicle forward
@vague dome Get Velocity > Vector Length > Set Float to Variable
Use those three nodes.
i tried this first, thinking i could just add X/Y velocity, but then i realized it goes into negative also 😮💨
I divide by 1000 (float) to get an integer that never goes above 35 so then I can render that as speed in the UI
If you need vehicle velocity along its own forward direction then you want dot product
That'll be a scalar
would this not work? i dont need Z velocity
Abs keeps it positive :p
You previously said you need forward velocity. Which is it
good to know, thats one node i have not learnt yet
Velocity.Length() is speed.
Dot(velocity, self.forward) is forward speed
(Velocity x (1,1,0)).Length() is speed in XY plane etc etc
i do use dot product previously in my graph, but i dont really understand it, does it just compare 2 vectors?
and what is the float that comes out of it?
Basically dot product is a product of how aligned 2 vectors are
Cross product is similar but how orthogonal they are. ELI5 version
yea, i use if for aligning the sails towards the wind, so that make sense
i figured that was what it was, but i didnt know for sure
You 100% wanna know dot and cross product inside and out for anything physics driven
thats good to know, i'll read into that more
For example I use cross product to determine the forward vector of my tires. Cross product of contact normal and tire rotation axis is forward.
so for dot product, is 0 180* opposite and 1 fully aligned?
-1 is opposite
ok
0 is orthogonal
It's the most useful vector operation you have. Use it for projectile penetration, detecting angles for selection, wind force on sails, drag, everything
how would i go about getting those blueprint functions that are encircled?
"getting" them?
its for spawning random enemies, im just trying to replicate the bp
yeah i'm just confused where you're trying to get them from/to
its for Ready or Not custom modded maps, one of the users provided the example and ive asked in the forum but they havent responded
yeah maybe someone else understands but i just don't get what you're asking
You mean how to get Spawn chance or spawn points node? Those are 2 variables that you have to create in the blueprint editor.
Spawn chance of type float & Spawn points probably of type actor array.
ok thanks Harshdev
you just have to hit add variable on the left panel Aku
I guess the spawn points is a target point array and not an actor array.
thanks Crux
you have to also as Harshdev is saying make sure the variable is set up appropriately for the value you'll be putting in it
ie if its a number it will be an Integer or Float variable
ok thanks for your help
anyone know what the best way to get the location a certain distance away from the pawn in the direction it's looking?
GetActorLocation + GetActorForwardVector() * YourDistance
ty
just testing this out it doesn't seem to get the correct hit location, spawns the guy directly in the middle of the map every time
the guy is just to test it btw
normally would want to just render a sphere or something to show where projectile will go
Hit location returns zero vector if it don't hit any thing.
You would first check the return value in the line trace node to see if it hit something. If not then directly use the target location if you want that.
so basically i'm making projectiles that move a certain distance per turn and only continue on their trajectory on the firing players next turn
I was doing it in a way where it should have hit something
you want to multiply the forward vector by distance iirc
and then add that to location
Oh yea, I didn't see that.
ahh
any idea the best way to continuously draw a sphere (or projectile mesh) at the end of this linetrace?
draw debug sphere
and make sure to raise the thickness a bit
unless you mean ingame
it would eventually be in game
ie. press Q to ready fireball (shows the distance it will go) and click to actually cast
in that case you need some kind of targeting actor/component thing that follows that position on tick for the player
by creating a mesh/particle/projection that serves only to represent the targeting
of course it will only exist when you are readying the ability etc
right right
A single line trace on tick won't be that expensive but you should still have a boolean check before tracing if the player need not to run the trace during his whole lifetime.
yeah i got that
thank you
also how to change the color? create dynamic material instance only works on primitive component and i'm unsure how to get that from my actor (just the ball that spawns while readying spell)
Youd need the component your setting the material on
As actors in themself dont have a material
Can I get the component from the actor?
Depends on class
But the logic for setting the material should probably be in itself?
parent class is literally just Actor
In the projectile class
You probably have a ProjectileMesh component on the projectile.
Its the sphere.
That doesn't matter, you will still need to get it.
Still recommend wrapping it in a function in the projectile class
"Update material" or whatever
And calll that externally
ohh
so in ProjectileAimMarker just make a function ChangeColor and call that function from the other
i see
Avoid accessing private (or should be private) members and components from external places
meh something is still wrong
it still isn't changing color
works otherwise though
sorry its kind of a mess
Show material
Also, maybe im missing something, but doesnt the trace logic belong to the projectile?
someone can help?
Mkay ^^
is this incorrect?
Dunno, depends i suppose
i mean it would just require a lot of info going to the projectile constantly
pawns location and stuff
Yeah probably
So prob fine
I see nothing wrong with the mat atleast
Is it being applied at all
Depends on what you set it to 😂
i might be missing something huge
oh
uhh
ye
so thank you
lmao it was still set to the one i originally had it set to which was a material for shields
but still not working actually lol
wait it shouldn't matter though lol
do i have to set the material to the dynamic material i created?
As long as you assign it you're fine
Having them different makes it obvious if rhe material didnt get assigned
oh you mean so swap it to white material and see if it updates at all
Yeah
nah its not assigning anything
So thats an issue^^
wait no it is
i set it to cube material and it swaps to projectilemarkermaterial
instantly
Then im not sure whats going on
😦
yeah i fixed that
still not updating
Is the event fired ?
yes
try to change color on beginplay,
and it makes it through the branch so theres something wrong with the set vector parameter
or add a print string
yeah i did
it correctly makes it through the branch
is it something to do with this
you should stop messing up your screenshots if so xD
You could try with scalar instead
when you inspect the bullet in the editor
nvm
this is how im doing it, using a scalar param instead
how do you get the collision parametert?
ok
"ScalarParameter"
how do you get the set decal material?
since im using a decal, thats what the set material node is called
but its replacable by set material
not for collection
try to use the exact same nodes
just to rule everything out
like this
doubt thats the difference but who knows at this point
and the target for the set scalar parmeter value is material instance
easiest if you drag out from your context material instance
k yeah, something still broken
no clue
thanks for your help i think i'm just gonna give up lol
x)
blend mode?
huh?
translucent
lol
it apparently does matter....
it works when opaque
oh its working all together now.... i think i forgot to apply...
thanks so much
Morning! Is it possible to bind an event to the kill Z function? or in general make so that i can fire an event after I destroy the Character?
that would also trigger when the actor gets removed for any other reason, no?
why not change the damage type to be unique and switch on that?
also the generic actor damage is going the way of the dodo in ue5 unless something changes
Any help please: I can’t connect the (GET) array to (IN Pawn) node,
I need the Actor class to be ( BP player position ) tho …… any ideas highly appreciated 🙏🏻
Hello again people, does anyone know about anything about this? I searched the chat histories of this channel but i couldn't find a proper answer to that. Can i create another actor by slicing one actor? Thanks for the answers
Tells you the problem, the possess expects a pawn
how to know which pawn exactly, cuz this is vr, usually when non vr I would hit F8 or F7 and get ejected from player and see which pawn i'm controlling, anything like that in VR ?
Not ultra sure but seen this handled in 2 possible ways
Both require you to have different actors of the sliced part
You can either handle it with sockets or directly with bones and have a table on what to spawn based on the hit bone
There's a function to delete everything under a bone and then you can spawn the other part based on that
Or yeah, sockets where the part is already setup for detatchment.on specific points
Is this singleplayer only?
yes
Use Get Player Pawn then
sorry, where exactly do i place that
coming out from 'Target' correct ?
Nope, just search it up without any connection
Like you did with Get Player Controller
Ok no
Target is Get Player Controller
Pawn is Get Player Pawn
You don't need the Get All Acrtors of Class
so like this
Thanks for your answer. So it is impossible to create another actor by using procedural mesh slicing? Did i understand correctly? I wouldn't be able set other half as other actor's static mesh component or procedural mesh component?
I mean yeah, but don't think that will do anything, you would need a ref to what you want to possess 🤔
What are you exactly trying to do?
Never tried Procedural Mesh Slicing so can't answer, those are the ways I've seen stuff done tho
Mostly setup prior
I'm trying to do a switch between 2 pawns u could say, like change from P1 To P2 with a click of a button, right now i can change to P2, but i cannot go back to P1 after i change to P2
How do you know about the pawns?
here's the other p2 possessed
Well, if you wanna switch between your player, then something in the world and back, you would need to store the ref of your player to possess back
that's exactly what i've been struggling to achieve : /
Is your player a character or a pawn?
I mean, you can just simply to this
On the second possess
Before you actually possess
Get Player Pawn -> Promote as Variable and Set it
this is my first p1
i think it's a pawn
the same Get Player Pawn that i created recently right ?
Yep
" Then on the first possess Get that variable and use it as Pawn
Make it a Validate Get"
sorry please elaborate on this
Have the Set after the Pressed of the second InputAction first
anyone got a trick to make an actor move to a new location smoothly? I'm using setactorlocation right now but its very jittery
does Lerp work for this?
It should yeah
i think u mean like this
Now Get New Var
Right click the Pin
Should be an option to convert to Get Validate
Or Validate Get, or however it was called
If the validated get doesnt work, you can switch it for an is valid node, i have had issues with validated get before
Yeah, let's keep it simple as use a is valid node xD
Oke so, get New Var
Right click on a blank spot and type Get New Var
got it
Connect it after the first pressed and possess only if valid
And In Pawn in the Possess connect New Var too
so far so good?
like this?
okk
Just be careful that if you press 2 times the second one it will set the second pawn as previous pawn so you can't go back to the first one :'D
So you could have a check to verify if the same Actor and not do it if that's the case, but should work nonetheless
oh is there no workaround this issue? if there's none, that's fine, i'll just get used to not press twice on the button that changed to the other pawn : )
Check if the actor to possess and yourself are the same actors
If the same don't do anything
Update:
I can't go back to P1
I can change to P2 but pressing button again won't take me back to p1 : ((
Does anyone have any good tutorials on setting up steam and steam achievements
why you have 2 different input actions if you want to use the same button to swap
Honestly no reason, if removing it and making it only one input fixes it that would be fine
well i thought you can't map the same button to two different input actions
It's not the same
i might be outa my league sorry guys lol
Print String New Var 0 right before the Is Valid, see what it stores
I'll try
oh wait
actually no
Pressing the A button, would display hello, Pressing B, would change to P2 , But pressing A to go back, nothing happens, I can't go back
What do u mean see what's inside the variable 😅 ?
From New Var 0 you can drag and get the name of what's inside
Then connect that into Print String
Get Display Name / Object Name or so
There are a couple, they should all work
?
Drag n drop the NewVar_0 variable from the panel on the left onto your event graph, and hook it's output pin into the In String pin on your Print node. It should automatically convert it to a string equivalent to the name of whatever data is stored in NewVar_0.
See if anything is there when you try to possess back P1
When a Print node is called, it outputs as a string whatever you've plugged into In String (or whatever you type in the text box, if you haven't plugged anything in to it), during runtime (while the game is running). It'll print on the left side of your screen in-game.
If you're REALLY new to game dev/game engines, I'd strongly recommend running one or two beginner courses. Things like using a Print statement to check the status of variables is very common practice in game dev, and will really serve you well in the long run.
Thank you Mumbler for this clarification!
Also, the message is now saying: 'Bp_virtualKeyboardPawn' when pressing the button to go back to P1
@dark crow
Yeah, that's a problem, it's for some reason storing the keyboard pawn :'D
You pressing to possess P2 just once, right?
Right
If I could add a laser pointer to my first P1, i would get rid of all this P1,P2 BS Lol
Do this, not a good solution but would get rid of an assumption
The only reason i'm making this switch is cuz P2 has a laser pointer that works with the screen widget
Put a delay after the Set and try again
i'll try
hello! How do you get a level sequence to always play from the start, even if the play head is not at the start in the editor?
@dark crow Ok so it works the delay works, but now going back to P1 nothing functions,
So it goes back to P1?
yes it does
Anyone have experience withthe steamcore plug in?
They have a discord you can ask stuff in
OK thanks
any suggestions @dark crow ?
Possession works so it not working properly can be anything
Thank you so much Ian real mvp
appreciate the help
I think I'm gonna try to get rid of this P1,P2 headace and try to make a laser pointer to P1
You can in case just have 1 input with a FlipFlop
huh ? set relative location ?
tried the flip flop method b4, same issue unfortunately
Yeah, it just clears up a little
The issue of the pawn not working seems another problem tho
Not related to this
coins -> get relative location?
coins is relative to skeletals relative to scene
Hey
Is there any way to listen when animation on skeletal mesh is played ? (I mean Skeletal Mesh with only one animation)
coins -> get relative location
If you wanna calculate the total relative to root you need to do it manually
Easiest would be GetWorldLocation|(Coins) - GetActorLocation()
So from my understanding: you have one actor that has multiple coins within and you want the location of each coin relative to this actor?
making a tower defense game, currently trying to make the towers shoot the ai, followed this video, didnt work now im stuck on how to get it working
https://www.youtube.com/watch?v=kw5ak4iOGFQ
FIrst read the comments, because there's a very important message for everyone.
If you liked this tutorial hit the thumbs up button and subscribe if you want to see more of my vids. If you have any questions tell me in the comments.
Facebook page: https://www.facebook.com/AlenLoeb/?ref=aymt_homepage_panel
Music:
-------------------------------...
@trim matrix
Hmm, Are your coins meshcomponents, a single mesh, actors or something else?
nvm... sorry
Grab the coin mesh from the component list, then set component relative location or something similar to that
if you wanna go fast you gotta go cpp 😄
If you dont notice any performance issues, dont optimize it 😄
wouldn't it be great if the print node had a special 'enabled' checkbox that would internally connected both in/out execs, so that we wouldn't constantly have to add/remove print nodes
I think there's some feature that allows you to enable/disable nodes, like commenting out code or something, but you have to enable it
the logging facilities in C++ are a lot more flexible though, you can define your own log categories and such so it's easy to filter out logs you don't care about at the moment
or you could log using visual logger instead of printing
huh, where do I like, go for this visual logger, what do I call? or do you mean the one induced by the UE_LOG macro?
visual logger is available in the editor, you have to enable recording for it and you can then see log info over time
there's a few vislog nodes you can use, and I think in C++ maybe macros or functions, haven't used it much there
Hey guys, I have a question. I have been a programmer for 3+ years now with unreal engine 4. One thing I've never learned is how to make advanced animation systems from scratch, like ALSv4. Making IK System Animations in general is a topic that I know almost nothing about and I want to really learn. But I don't find any resources that can help me with starting to learn that
Where do I learn how to make IK/Procedural Animation systems?
Maybe start by learning basic IK systems stuff and go from there... some of the info on how those work might be something you'll need to learn from resources that aren't UE-specific
Ah. just collapse into your own 🙂 "GetAbsoluteRelative" pure node
Where can I find those?
There are a few guides on how to set up foot placement IK in UE at least that you can find pretty easily
which is not too complicated to do and should give you some basic ideas on how those systems work
there's a couple also I think on hand placement in weapons
UE docs on IK also I think had something on that topic :)
I know those from Ryan Laely, but those are too simple. Nothing close to developing a complete locomotion system like ALSv4.
How can I get there
You're unlikely to find a guide that will give you a step by step method of getting to something like ALS
The reason is that those are fairly complex systems
i'm gonna jump on the bandwagon in this topic and ask the following long shot:
anyone here successfully used leap motion with a fully rigged, two handed character? any relevant info on how to set up the IK from the shoulder to the palm would be wonderful 🤦 i feel like the leap motion rotation coming in wonky is where i'm getting stuck but i'm not totally sure
So you'll have to build an understanding of how the systems work on a basic level, and then build your knowledge up from there, so that you can then combine the different things to build what you want
There might be some GDC talks or something on topics like procedural movement systems, they could give you more of an overview on how they function so you'll have a better general idea
Haven't done a whole lot of stuff with IK myself but it seems you need to tune your IK rig settings so the joints don't do anything excessively weird
LMAO i'll keep trying to do that then, thanks
feels like 2 steps forward, 1 step back but i'm making some progress every day 😂
lol that's how it goes
not sure but #animation might have some folks who know more about IK since those two topics seem related
ahh you're right, if i struggle for long enough i'll ask there too
hello! How do you get a level sequence to always play from the start, even if the play head is not at the start in the editor?
never used that feature myself :\
it seems they I always leave the play head somewhere other than the very start when I'm fiddling with tracks. Then I forget, and when I test, that lev sequence plays from whereever I left it.
I'd love to just have it play from start. THe make movie settings has a start check box but it doesn't seem to work
I wonder if there's a node for it that would play it from start that you can use in the level bp or something?
Mine plays from the start o.O
atleast to my knowledge xD
Oh wait, nvm, in editor
Not sure what you mean by head and not playing from start tho
there are tools to rewind it to start (?)
Or is this not what is ment?
assuming play head is the
I can't find my variables .
how i can get it ?
I watched the tutorial and i did what he did 🥲🤌🏻 he use this mish
Prettttty sure he didnt
if he got the ammo variable out of it 🙂
unless you do source edit, skel mesh wont hold your ammo
yep he got
Which means its the wrong reference type
it should probably be some gun actor type
Hi, I am trying to make a weighted randomising, and I missed something probably.
I got that, but I get mixed results.
The RandomWeight is between 1-(sum of the weights).
Should not the ForEachLoopWithBreak give me the last index?
Thanks I will try to find My fault 😁
the break would give you the index you breaked at
I tried to debug the results. I printed the random number also the index, and did not match. Did I miss something in the logic then?
I compared the first weight (60) with the random number, and if the weight is smaller, then break, I get the index 0.
If not I substract the weight from the random number and try again.
That should work, should not?
@gentle urchin If I edit my tracks in the lev seq in editor then, I just close that window and play the map, when I get to that lev sequence it doesn't play from the begin. It starts to play from where I left the play head in the lev seq editor. So I'd like to have a way to simply "rewind" or play from start node so that it always plays from the start.
This is my setup:
So when the player triggers a cut scene, the player camera blends to the lev seq camera, plays, and then returns to the player
I believe "play from start" is a valid function
weirdly enough, it doesnt exist
there is a set playback position tho
along with a get start time
but that again seem to trigger whatever event is passed (?)
@peak wedge I have settings going in that have a start Offset of 0 -- there's no Play from start in here that I can find:
Ok Set playback position seems to have fixed it!
THanks!
I've got another problem (different from Levl Sequence). I figured out how to place a video with an alpha on an object. I use two video files, one as the emissive color and then the same video with an alpha channel which goes into the opacity:
It works great:
Thisis a screen shot and the alpha video is playing on a "glass" object
looks pretty cool, I must say!
The problem is that the media player for this alpha won't save the link to the file media source:
https://cdn.discordapp.com/attachments/221798862938046464/951171344240893952/UE4Editor_09_18-34-33.mp4
I still have no clue why my skeletal mesh's physics bodies seem to stay attached even tho they shouldn't, if anyone has an idea I'd love some help !
this is the physics body setup
and it has no constraints
I have to double click on the Name (lower panel) and save the play list (Uppewr left), but even then, if I close this window or restart my project, the alpha "losses" connection to the File Meia Source
Any ideas?
I'm not even sure what holds it together in the first place
Thank you!
it shouldn't that's the thing
I want them to spread apart but for some reason they're being held together
I'm really confused 🥲
Right, but initially
is it just being in the hierarchy that makes them stick together?
oh yeah they are attached to the same root bone
and when you "kill" it, you do what exactly
I enable physics simulation the way I enable ragdolls on anything else
this is the bone structure
Soo... you want them to still stay attatched, just loose ?
no I want them to be completely detached
// initialize physics/etc
GetMesh()->SetSimulatePhysics(true);
GetMesh()->WakeAllRigidBodies();
GetMesh()->bBlendPhysics = true;
bInRagdoll = true;```
this is the part that enables ragdoll (taken from ShooterGame)
maybe it's blendphysics?
Not sure this is possible as a single skeletal mesh
Almost sounds easier to just make this stuff work in code tbh 😄
yeah but it means they would have 4 static meshes attached each
not sure it's a good idea
Yeah, it would
Guess it all comes to amount ?
are you spawning millions ?
thousands?
10's?
I'd say below a hundred
You could also make it loose parts from partial dmg if so desired 😄
not sure about the cost of it all compared to a skel mesh
i would think skel mesh was more expensive , but perhaps its way more optimized than i can imagine
it would need to have a skeleton to be able to play the animations either way
it's either having one skeletal mesh and 4 static meshes or everything in the skeletal mesh
fair enough
that is indeed weird
ok changing the bone that had the boxes assigned to them helped but it still seems like they're connected
Yeah they definetly appear affected by it
I don't know why it's being dragged with the head even though they're not even connected
How would I go about making an AI Check If something is infront of them? Like a barrier, I already built the barrier bp with full functionality.
I think it's the setup of the skeleton that is causing issues
the bone that affects the wings is located at the origin
@thin panther Wdym? I already added navmesh, the ai can walk around, attack, chase etc. where would I add to make the ai check if something is infront of them? ai bp? anim graph etc
Why do they need to check the barrier, its just blocking geometry. Maybe specify the type of barrier you mean and what yiu want it to do
Its basically the barrier from COD Zombies :), So If its in the path, I want them to detect barrier and then destroy it
That still doesnt help much
Im just not to sure where to do the code from if that makes sense?
Ok so you could cast traces in front of the character to check for the barrier
Probably use that in the controller, to set a blackboard value for a task in the behaviour tree
could I add it to the ai perception?
I guess you could also use the line of sight to checj if it sees a barrier
That woukd make more sense
Thanks :)
Np
and I would still need to update it in the behaviour tree?
Okay so I have my game clock working and the sunsky moves around the sky but for some reason when it gets to 0 at Midnight the sun jumps around weirdly and then when it gets to 1am fixes itself...what im I doin wrong? I have done this in BP before i write it up in C++.
Ive taken a video to show the issue
Hi, Everone. I'm struggling to find the words to Google. I want to click a button that does an action. If I hold the button I want that action repeated multiple times until the click is released. Anyone know what that is called?
You can use the button's Pressed delegate to start a timer or open a tick gate. Invalidate timer or close tick gate on button's Released delegate.