# Implementing

## Add Interfaces to Character Blueprint

1. Now open your Character Blueprint (ThirdPersonCharacter in this case) and add the **BPC\_RPGSystem** to your Character, for **AI** use **BPC\_RPGSystemAI**.  (I changed the **Collision Object Type** to **PhysicsBody** on my **SkeletalMesh**)<br>

   <figure><img src="https://lh4.googleusercontent.com/_L9AwUgYLKwKl6yNNUCo8gEltP4B72yDLj4eRTgr_h2wdEIvzt4ybkgVIzAIQe-r1YfxyHnoqA5Y3NqkskgZl2NJWzZvs5xkjhFSZLXM9RNNTVJo7ODbqa4q9_q50Es2yyhoUpoCFe4wqJUyNRRV5mJFx57RZq4EvP-F0HF0UWGZ_dIPGeG1_0HfzlZQ" alt=""><figcaption></figcaption></figure>
2. Go to the **Class Settings**![](https://lh6.googleusercontent.com/NTAlG5AgyvkQsMWbGDGSIjRBIL9O8CJA5CVZsdtAPazpN91d2s9KMpRoH0-gWUSNmFaKP14cZmWJdl29NrZAKQvYFWqbmfbs6W88rztEg6JAu3Q9gs_lpiim5mVMy4ij3iSBrsTN8avJ_BeHbwUW1FxiRmpgXsjnORfl4KEXcWxIW1-nsOKjgHujR6Ui) and implement the **BPI\_RPGSystem** and **BPI\_RPGAnimation** Interface into your **CharacterBP**.<br>

   <figure><img src="https://lh4.googleusercontent.com/Cu0KUs95Ib25UQsLfYJWHtqA20zGE84f8hjMTtkwyJ97cS-6a5dOnknRPQryZ_X-6q5pWhH58c4I9Z7jb-iVS9kByLaoBKFrdBXT9fym47YIMEHPSPsxWwyfkzuV-We2pjz72TdpTuwyvJt8O1LYrrNILgLQzlSRCuYxR3C_QkiFzutSHvsUWhDMHZLv" alt=""><figcaption><p>Add both interfaces</p></figcaption></figure>

   <figure><img src="https://lh4.googleusercontent.com/bwgHWcWXUBMLUn_pWxD2A5kYuQWl13cEMOq3wAe7fO6LyLlMkeTkvFL_1j2PaZDsngTgMiMkf73ZI2OchnA5VhI7dRlS8AOCWk0NL32vkkUeq3309tAyvEkLA0mEIE0whaVxxasWNR7c1_TWYbvCNvj2-jXEuGDp-Ppe9v17arp7tUy-E6hudNhD6a7x" alt=""><figcaption></figcaption></figure>

## Connect Interface Functions

1. Let’s start with the most important ones: **GetMovementSpeed**, **GetRPGSystem**(Use **GetRPGSystemAI** if you want to implement it into an AI), **GetMeshRadius**, and **SetMovementSpeed**.<br>

   <figure><img src="https://lh5.googleusercontent.com/6pbkQfhg6kcLGeJ0ZAjsnwyqV3iHiNwxl3vu8OhRbcNY8AEA44MiB5pU0CXT0sHp6_o8cOsLaRgzZJL5Es4zY9xIXJzrqP-8Kc4z9OXuIVja-kPbw7HH4PUQvbYBEjhKG1wafVy-_FM6drzFBZeRr8lAuREb27v8IhGqBkcWQCoY5wl46uSpUr2Da5Z0" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://lh6.googleusercontent.com/eXcrctMl5PY1n1ruOl2BtqPP9FdzW9Yo7nmjDTlXFiQMaOKfFtlROikYhn58QSnLgfQDmRYdc645GciexR6efrVyd-QWk_I0-Mch2dVUnCwxMENwkIf62CGtJpdoMmtNJA2hdZ3OtN7ERBt-O6ZnM6NCXsZ1CUcIBhDTnOairMSAkukDB47xirbWwgor" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://lh3.googleusercontent.com/9wGKMtbEkW_CVm9Ez5I5vgiUDJJkmIfVYDowGTj6EHQLOSYIZTH0CMOXKoAlPIa6WwXezUwhLy7Pogjqb1kqW6zWhVcvZuYcMi-jLv52T__5CPs4EB07kxfinnantL2AQU3YDByyQ5ToYmAtWqIRZwyqS1-9PXkyVWWGyXI4LyVX9SCLV0-pU-qeGkpv" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh6.googleusercontent.com/Ypi8v7ToaXC-Gby8bN_6d6YGh1OOlBRcraOP0fi1uffxWd5qVpVaf67nl0Jo9wbw1y6onQHqtBy7MDy9BVRNvLMUjBE7PKcL3GGdTRe0Mui7ZssrxTeoyRheWGVvqWhBe_L2_LazrmU4tRgU9wsmHJSBPEYlbQw-AUhhwTZI08qBf82IdgaFOw" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1740300672-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUQeXeV7FmOzkOjebs98Y%2Fuploads%2FElq79Ttx5smqQYCHFJjM%2Fimage.png?alt=media&#x26;token=3eac40a1-ce76-425c-b727-3acea9acb597" alt=""><figcaption></figcaption></figure>

## Set up Animation Handling

1. For the Animation Handling, you also need to set up the **GetAnimationState** function.<br>

   <figure><img src="https://lh5.googleusercontent.com/BIZzIXvYub-Zq4UlgC8rOTLlznUvOdIWZxG7ve8IYcMOm3QhWWZ5ZQQV9Gttdz8KQ3h6CwjHDev9bpyvCl1mAVTRk-WebE1xFSPq4E4hDUYfWwYLmADCBoeoB8BocfLsc-X3Y1C9yAQDtkr8JSvYGHsOYeo8as0sEfLY_Shp9cgnbrO-M3zRGrw2cZn4" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
You need to create the **Falling** variable by yourself.&#x20;
{% endhint %}

<figure><img src="https://lh5.googleusercontent.com/3VdZsWDocKJ7UfdQqF3VJGAtSzsV5kQaiHx305peP_Sf4TvsJeO-PxuGCMex09KPBvgx4QO2mXH83_EEMwSohvq63nDE5kNs9CZrFqzvibMRiHsMRQzRLROhQRS9PhL44oKL49tQWi55wgUMtRnLyerdmuGYCvZbbp7-NlhAgE4iZqbBZpWFspxUcGao" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh5.googleusercontent.com/CxxxaE5PuauO7ZUZAi1VS9HQrBpe6NILYynPaETUowuPeKnVHjDhE867Na9A3YBm1w8JKRh-6pb9JDl1d1rLULqE2Z32c4SvlJZBXT103OSeEMG0Uul2Wbld7rkwl5LFS7s6rISJGsGHbKYxL-a7uw9xJtEyOHJQiVSpVgPq-TlE_zoCSP6An_2RszwP" alt=""><figcaption></figcaption></figure>

1. Open your *Animation Blueprint* and add the **BPI\_RPGAnimation Interface**.\
   Add the **StopSkillAnimation** and **PlaySkillAnimation** Events.

{% hint style="info" %}
Please take a look at the *ABP\_CharacterExample* to get a feeling of how you can use the **PlaySkillAnimation** event for your needs.
{% endhint %}

<figure><img src="https://lh6.googleusercontent.com/_bGUb4_YUC81n353VCTxkKZy9sVADtwN50PSaRPHQUZst9yFrHsCFp3pp4vZCFk87DHxwKeRCYHj8qJ7yAkL_HNlu_bLE9W8AwH8wx-L8DH22gOhGRDMml1TvjFFUkvBUKPSFi3ECf3bTOnous89D-8nyeLpw500NGJKHdAVZG0AmWho3Fmx6agtkg5H" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh4.googleusercontent.com/Tk_u19huaTKcmQcwTyOlYBp7KQzTrUfQQBdF3_mL4fcsaBWcyvrioWLJRom-1l2we8lEiGFMpKs1lC5RnQB78hIGVUNJ0b_0rkVNj9LrX8eVEoqxC_mko-6UmJKrogBwZ_nt6L3RG-C6tTHTW0TEsUwHJo3W-91xoiWqCV-fIXeNui5TJSIykj6G9Gk1" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh5.googleusercontent.com/HCsDNqyeFSy6GTKjwN0VP72Af1-A-3V2Y4h_r9JPgK5BQykWnwfPswnp8Ec7HOw0y81TgBn9BF0cllEIx6kKwBEu5dq0HnrW_H-gPTH2sH2Zy-rbBGJn6XPAR1PksRJ83thnulg-FPsP-fOJ9y6J1AYycfR3JS9mApvMDA_uhOtp46jxpZZc6osfWlZr" alt=""><figcaption></figcaption></figure>

2. Open the **BP\_ThirdPersonCharacter** or **BP\_CharacterDemo** and copy the following events into **your Character Blueprint**:<br>

<figure><img src="https://lh3.googleusercontent.com/leswQaorMG66_-5h0BPA5jbkzYvBYlmWVC3vrMvUr9DXnu_XAqueCJUI0n7i8HuWovswMotbI3NicnDHhb7prsI8mb4jj8hTZZHO-OSvQrc4apKI8Y_gWnsHAwhBZZwFeegLBLa3nn01whxZnBwYbqYuPExM81K8wH-_B-iLpeq7-ytEP-odfbjduGHz" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh5.googleusercontent.com/5Usl5CYQ68soeKxOWIhqBbKqv7CY8NuEq4VuV0bjk6Iv77yF2FN_tMDcrWaC2e2elwL8ubBeMmVIt76UWF5PmSKdPXRv9nOaXD7XcFZS04wvShqwAHTL6KzX7AN24SiFeR8lfBiXdfWsTQmawnVbwbluRmj1dQXpG3uqwlyrXy3TpbuXoCAgpKJx3hIh" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh6.googleusercontent.com/EtJb265Zo4sewDFZpnMMls4mPGpwmJv75JuKdTVdivS6Hl3GaimCN-MN6N5_LJmo0yaKa6_71_TLcJOBa2dkPzX6akAP2gFWirVe-MfWAElFYs9cHcscd4EZe_iAApH6KKy_io_44Djp0oCxLbYJS6oW7WetSn0eRpRGfj8LPfo4q39FkJq6AZbaHS_f" alt=""><figcaption></figcaption></figure>

3. (Optional) If you want to use the Visual Equipment mechanic you also need to set up the VisualEquipmentAddSkeletalMesh, VisualEquipmentAddStaticMesh, VisualEquipmentDestroyComponent, VisualEquipmentDestroyComponents, and GetPlayerSkeletalMesh.<br>

<figure><img src="https://lh5.googleusercontent.com/xd5wiSQkPX35Gt2sU5yOLGh5XZD6x0Unv_g9bkDTn1Xv2kqJW3gxqZL0y4TGfPoebGM_uB2P1s-D-QpclSxMBMmdEqigf81i2htxoJ3xKi0XAVD9snM-BGTQ8L1OUABMhsiFsaREPsHBQ_lWXrztJzIsH4Q_sSl8SKjNpcUV4QIBLm_ggpXm1X-cCQxW" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh3.googleusercontent.com/20FAqfqx0oX1R4ZHk8p2eBqcDuRGSd2rq3l2-6udmxpISYXoae5X_Ytn-A2NMrDFkdT0OPfapItADyHioUEYNu8_yOgQoCNmCjwM_MchdXr2aHNtoOWQUpA_ZpdOqQ1iz4SbYPGo9Zzso7-K3qBbkB-15nfGK7HHtJ0kcQ7ktUpCGilz68MvIzH-U7fZ" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh6.googleusercontent.com/dMFsaIaRKU7Nnm1bs5dkbiD7ULRdi6t4UWZg6iU065m5UMq5dckz8erQFZc6avXFcdVkYGCnseDF0SGDvFFhEFliaAN_Gbe4FMfgKxlQFzY6lFQ_NTCjaSadwBMmYKTCnGtGwjbezD3TEQhx7tI5gP35DyoWmJfTIMrtIff2khCtvrA6sinDqe7kI2hv" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh3.googleusercontent.com/7MJVOtwV1vQnOWMSg1JNnQV0Xj5vqsReMiKMLXXovfKNVbG-qL8aRt1u7BCmZDlSPelMT5CWtux89U2yEZ2rh16AgLILCisaQv5SwFUMw7JQfpBGuGesbJLQ8bjsy67KKGDpXV4tbkM0k_wRoT6DnpK6GJWkqh_LSfwh7pA9b0ktuybZoVzueB3nVBSv" alt=""><figcaption></figcaption></figure>

4. Add the **BP\_HUD\_RPG** as the **HUD Class** in your **GameMode**.

<figure><img src="https://lh5.googleusercontent.com/kwULsMjngKyotkiXy-EjCsNuj64D_E4152JEVT-wBMhmrRFFhgZIv5_mkngKVkX4NSnmr4v-nkJ0m5rdK4HeUEBNITToy-W4jrXEiQe_2t3h2I1vQigya8Ugn6rp2-JYB_plellpmJrXwTlKKzhOmygoEoeb8ejoktOHA7G6MEUHxiYMGqRvt8oa5kyf" alt=""><figcaption></figcaption></figure>

5. Now go back to your **Character Blueprint** and add the **InitRPGSystem** and the InitHUD to **BeginPlay**. Also, add a **Dispatcher** for **OnDeath** to handle your ragdoll and the **respawn**.

{% hint style="info" %}
Check out the Third-Person and Top-Down Example to learn more about the ToolTip Collision, Pickup Collision, Range Indicator, Ragdoll, and Visual Equipment! (You can copy & paste everything into your own Character)
{% endhint %}

<figure><img src="https://lh5.googleusercontent.com/M0okfOQ3uG6GauqjEmMQF9H29GA4EvEcx2f7-WouaJh5rQGMCimGPbIeFYCfmoWEVfV22w2Or8RtiX52S51kWwblCP1Z7p7uSoMItrcqVHK1TVluh5oxS8mWyRGbd1cR6xufXASbIZ28NKTSI6pgdl0UpRTJ1HDkqR_YVwUN-vjix8zEx-k64RlExyMy" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
BE SURE YOU USE BP\_Gameinstance\_RPG AS YOU GAMEINSTANCE AND YOUR GAMEMODE NEEDS TO BE A CHILD OF BP\_Gamemode\_RPG\_Base.
{% endhint %}

**Done**! Now you have full access to the framework, enjoy it, and thank you for buying!\
(If you have any questions or need help implementing it into your project, don't hesitate to join our Discord)

<figure><img src="https://lh5.googleusercontent.com/ToDOkqbsmOG0rmlJObKYu5riyv1SsQjBHucVS2PKuLnky3Pj891rO0XH8FX9Yg9SLY9QxHjtG9cEXojFr7VqS-MWhqYOGeNwNyAKmJQrNJhvu_CNH_7pwFot3fq4pT6e7qzLUuBmXm7tGEqb2vsrgDFw7Il5EVoz-qHprH-nKlYfTG-FGka2L5F-dqbK" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh4.googleusercontent.com/FdiYidYKnW1-dvUZhF2QdVPRAFvI0Mah1AoCYOAsl-6lpV-LmflBFgzDzUFdc389BDMG0TQOpgzjBzOLev5iTv1hIrm00cdvLAakprKj3V_Y_6ZWV6hBed9nXb13QAYLP5Mp33n2bRdT4GmGEEpIccTu-IsdsjUGYxfhbxGYlFkc31TyW1qh-a_mNXBS" alt=""><figcaption></figcaption></figure>

<br>
