# From vRPex

This guide helps you migrate your server from vRPex to NOVA Framework.

## Quick Comparison

| vRPex                                           | NOVA                               |
| ----------------------------------------------- | ---------------------------------- |
| `vRP.getUserId({source})`                       | `Nova.Functions.GetPlayer(source)` |
| `vRP.getMoney({user_id})`                       | `player:GetMoney()`                |
| `vRP.giveMoney({user_id, amount})`              | `player:AddMoney(amount)`          |
| `vRP.takeMoney({user_id, amount})`              | `player:RemoveMoney(amount)`       |
| `vRP.getBankMoney({user_id})`                   | `player:GetBank()`                 |
| `vRP.giveBankMoney({user_id, amount})`          | `player:AddBank(amount)`           |
| `vRP.giveInventoryItem({user_id, item, count})` | `player:AddItem(item, count)`      |
| Proxy/Tunnel system                             | NOVA callbacks and exports         |

## Key Concept Changes

### Proxy/Tunnel vs Callbacks

vRPex uses a Proxy/Tunnel system for client-server communication. NOVA uses a simpler callback pattern:

```lua
-- vRPex (Proxy/Tunnel)
vRP = Proxy.getInterface("vRP")
vRPclient = Tunnel.getInterface("vRP")

local user_id = vRP.getUserId({source})
local money = vRP.getMoney({user_id})

-- NOVA (Direct)
local player = Nova.Functions.GetPlayer(source)
local money = player:GetMoney()
```

### User ID vs Source

vRPex maps `source` to a `user_id`. NOVA uses `source` directly with a player object:

```lua
-- vRPex
local user_id = vRP.getUserId({source})
if user_id then
    vRP.giveMoney({user_id, 500})
end

-- NOVA
local player = Nova.Functions.GetPlayer(source)
if player then
    player:AddMoney(500)
end
```

## Step-by-Step

### 1. Replace vRP Interface

```lua
-- vRPex
vRP = Proxy.getInterface("vRP")

-- NOVA
-- Simply use Nova.Functions or exports['nova_core']
```

### 2. Player Economy

```lua
-- vRPex
local user_id = vRP.getUserId({source})
vRP.getMoney({user_id})
vRP.giveMoney({user_id, 500})
vRP.takeMoney({user_id, 200})

-- NOVA
local player = Nova.Functions.GetPlayer(source)
player:GetMoney()
player:AddMoney(500)
player:RemoveMoney(200)
```

### 3. Inventory

```lua
-- vRPex
vRP.giveInventoryItem({user_id, 'bread', 5})
vRP.tryGetInventoryItem({user_id, 'bread', 2})

-- NOVA
player:AddItem('bread', 5)
player:RemoveItem('bread', 2)
```

## Using nova\_bridge

Set `Config.Framework = 'vrpex'` to maintain compatibility:

```cfg
ensure nova_core
ensure nova_bridge  # vRPex compatibility
ensure your_vrpex_script
```
