I have been using a method of determining chance that basically has an integer that is random and then if that number is higher than the target integer, do something.

I want to know if there is a better way of determining chance by percentage. I see the integer percentage node but I am unsure how it works.

So if I wanted something to happen 10% of the time, right now I would do random integer between 1-10 and if the number is equal to 1 let the event happen. Is there another way to achieve this?

To determine if something should happen based on percentage:

**IN C++ :**

```
bool ShouldHappen(int percentage)
{
return (FMath::RandRange(1, 100/percentage)==1?true:false);
}
```

In Blueprints:

- If the input value is 100 then there is 100% chance that it should happen.
- If the input value is 50 then there is 50% chance that it should happen
- and so on…

Nice, thank you. I should be able to implement something like this.

You can create a blueprint function library and create a function so its simpler to reuse

I see it has to do with C+ to actually make a blueprint function library. I know I could do it but it is unknown territory right now. If you know of any tutorials on how to do this that would be great.

No you don’t need c++ to do function libraries!

I updated my answer!

Awesome! Thanks!

@Azarus im curious on how the

bool ShouldHappen(int percentage);

{

return (FMath::RandRange(1, 100 / percentage) == 1 ? true : false);

}

would work because wouldn’t there be errors in the code? so lets say in the .h file you have bool ShouldHappen;

and in the cpp you structure it that way

bool ShouldHappen(int percentage);

{

return (FMath::RandRange(1, 100 / percentage) == 1 ? true : false);

}

Im asking because im getting errors and having trouble getting this to work, basically i want a 33 percent chance of a health pickup spawning

errors as in trying to return a value in void function

Is there a better way to determine this because this is broken… anything over a 50% chance becomes 100%

there also an option to do this with ‘Random Bool with Weight’:

bool ShouldHappen(int Percentage )

{

return (FMath::RandRange(1, 100) <= Percentage ? true : false);

}

This should yield all values from 1 to 100% chance

thank you it works well enough for me.

You can also use RandomBoolWithWeight

```
bool UVitalityComponent::ShouldSpawn(float Chance)
{
return (UKismetMathLibrary::RandomBoolWithWeight(Chance) == 1 ? true : false);
}
```

bool ShouldHappen(int Percentage )

{

return (FMath::RandRange(1, 100) <= Percentage ? true : false);

}

Here the ternaire is useless

bool ShouldHappen(int Percentage )

{

return FMath::RandRange(1, 100) <= Percentage ;

}

bool UVitalityComponent::ShouldSpawn(float Chance)

{

return (UKismetMathLibrary::RandomBoolWithWeight(Chance) == 1 ? true : false);

}

Same here

bool UVitalityComponent::ShouldSpawn(float Chance)

{

return UKismetMathLibrary::RandomBoolWithWeight(Chance);

}

already return a bool so just use UKismetMathLibrary::RandomBoolWithWeight(Chance)