# vrp (framework)

### <mark style="color:blue;">• (Server) Proxy / exports / events</mark>

<pre class="language-lua" data-overflow="wrap"><code class="lang-lua">--------------------------------------------------


<strong>-- DATABASE
</strong>
vRP.prepare(query)
-- Preparar uma query

vRP.query(query,params)
-- Realizar uma query preparada préviamente

vRP.execute(query,params)
-- Executar uma query preparada préviamente


--------------------------------------------------


-- JOGADORES / CONTAS DE JOGADORES

vRP.getPlayerSteam(src)
-- Retorna a steam de um jogador pela source.

exports['vrp']:canPlayerConnect(src)
-- Verifica se um jogador pode entrar no servidor (se tem allowlist, conta, etc).
-- Retorna true caso possa conectar ou a string para disconnect do mesmo caso contrário.

exports['vrp']:startPlayerConnection(src,def)
-- Inicia a conexão do jogador, após a entrada no servidor. Passando a source e o deferrals para entrada.

exports['vrp']:checkSession(src)
-- Função para verificar se o jogador está fora da sessão principal do servidor (bucket 0). Se ele estiver, será desconectado.
-- Util para verificações em ações que não podem ser feitas fora do bucket 0.


--------------------------------------------------


-- PERSONAGENS

exports['vrp']:setSelectedCharacter(src,characterId)
-- Define o personagem selecionado para a source do jogador.

exports['vrp']:loadCharacterData(src,characterId)
-- Carrega os dados do personagem após o spawn do mesmo, deve ser chamado em sequência do export 'setSelectedCharacter' a seguir do spawn do personagem.

<strong>vRP.getCurrentCharacter(src)
</strong>-- Retorna o ID do personagem pela source

exports['vrp']:getCurrentCharacter(src)
-- Mesma função que 'vRP.getCurrentCharacter', só que sem precisar instanciar a vRP.

-- No server também é possível obter o ID do personagem que o jogador está conectado através do state 'characterId':
local id = Player(src).state['characterId']

vRP.getCharacterSource(id)
-- Retorna a source pelo ID do personagem conectado

exports['vrp']:getCharacterSource(id)
-- Mesma função que 'vRP.getCharacterSource', só que sem precisar instanciar a vRP.

vRP.getCharacterDatatable(id)
-- Retorna a datatable de um personagem pelo ID.

vRP.getOnlineCharacters()
-- Retorna a lista de personagens online.

vRP.kick(id,reason)
-- Desconecta um jogador do servidor pelo ID do personagem conectado.

vRP.getCharacterIdentity(id)
-- Retorna a identidade um personagem pelo seu ID.

vRP.getCharacterRegistration(id)
-- Retorna o registro de um personagem pelo seu ID.

vRP.getCharacterIdByRegistration(registration)
-- Retorna o ID do personagem proprietário do registro passado.

vRP.getCharacterPhone(id)
-- Retorna o número de um personagem pelo seu ID.

vRP.getCharacterIdByPhone(phone)
-- Retorna o ID do personagem proprietário do número passado.

vRP.generateRegistrationNumber()
-- Gera um novo registro.

vRP.generatePhoneNumber()
-- Gera um novo número.

exports['vrp']:setCharacterSaveDisabled(characterId,disabled)
-- Salva as informações atuais do personagem (vida, posição, etc) e desabilita o salvamento/coleta destas informações durante 1 DISCONNECT do jogador.
-- Útil para eventos/arenas que teleportam o jogador, etc.
-- characterId = ID do personagem
-- disabled = boolean (true / false) -> true : desabilitar o save, false: reabilitar (ex: true quando entrar no evento/arena, false quando sair).


--------------------------------------------------


-- CASH

vRP.getCash(id)
-- Retorna a quantidade de cash (coins) que um jogador tem, pelo ID do personagem conectado.

vRP.removeCash(id,amount)
-- Tenta realizar um pagamento usando cash do jogador (retorna true se removido ou false caso contrário)

vRP.addCash(id,amount)
-- Adiciona cash na conta de um jogador pelo ID do personagem conectado.
-- Lembre-se: o cash é vinculado à CONTA do jogador e não à um personagem específico, portanto é compartilhado entre personagens.

exports['vrp']:tryPaymentCash(src,amount)
-- Mesma função que 'vRP.removeCash', só que sem precisar instanciar a vRP e passando diretamente a source ao invés do ID do personagem conectado


--------------------------------------------------


-- ECONOMIA PRINCIPAL (DINHEIRO)

vRP.addCharacterBank(id,amount)
-- Adiciona dinheiro à conta bancária de um personagem.

vRP.setCharacterBank(id,amount)
-- Redefine o valor da conta bancária de um personagem para o valor passado.

vRP.remCharacterBank(id,amount)
-- Remove dinheiro da conta bancária de um personagem.

vRP.getCharacterBank(id)
-- Retorna o valor da conta bancária de um personagem

vRP.tryPayment(id,amount)
-- Tenta realizar um pagamento utilizando dinheiro (item), retorna true se pago ou false caso contrário.

vRP.tryPaymentBank(id,amount)
-- Tenta realizar um pagamento utilizando o saldo bancário do personagem, retorna true se pago ou false caso contrário.

vRP.tryPaymentWithDebtCard(id,amount)
-- Tenta realizar o pagamento por dinheiro e/ou por saldo bancário caso o personagem possua o item 'cartão de débito'. Retorna true se pago ou false caso contrário.

exports['vrp']:tryFullPayment(src,amount)
-- Mesma função que 'vRP.tryPaymentWithDebtCard', só que sem precisar instanciar a vRP e passando diretamente a source ao invés do ID do personagem conectado.


--------------------------------------------------


-- GRUPOS / PERMISSÕES

vRP.getGroupInfo(index)
-- Retorna as informações de um grupo pelo seu index.

vRP.getGroupTitle(index)
-- Retorna o título de um grupo pelo seu index.

vRP.getCharacterGroups(id)
-- Retorna os grupos que um personagem possuí, pelo seu ID.

vRP.getCharacterGroupByType(id,type)
-- Retorna o grupo de um tipo específico que um personagem possuí (caso ele não tenha, o retorno será nulo).

vRP.addCharacterGroup(id,index)
-- Adiciona um grupo para um personagem, passando o ID do personagem e o index do grupo.

vRP.removeCharacterGroup(id,index)
-- Remove um grupo de um personagem, passando o ID do personagem e o index do grupo.

local list,total = 
vRP.getCharactersByPermission(permission)
-- Retorna uma tabela com ([id] = source) e o total de jogadores com a permissão especificada.

vRP.hasGroup(id,index)
-- Verifica se um personagem possuí determinado grupo, passando seu ID e o index do grupo.

exports['vrp']:hasGroup(src,group)
-- Mesma função que 'vRP.hasGroup', só que sem precisar instanciar a vRP e passando diretamente a source ao invés do ID do personagem conectado.

vRP.hasPermission(id,permission)
-- Verifica se um personagem possuí determinada permissão, passando seu ID e a permissão.
-- O parâmetro 'permission' pode ser uma tabela de permissões para checagem multipla, no formato: {"permissao1","permissao2","etc}

exports['vrp']:_hasPermission(src,permission)
-- Mesma função que 'vRP.hasPermission', só que sem precisar instanciar a vRP e passando diretamente a source ao invés do ID do personagem conectado.

vRP.insertGroup(gindex,gname,gtype,gpermissions)
-- Criar grupos de forma dinâmica (reseta sempre que o servidor reiniciar).
-- gindex: string - index do grupo 
-- gname: string - nome do grupo
-- gtype: string - tipo do grupo
-- gpermissions: table - permissoes do grupo ( ex: {'perm1','perm2','perm3'} )

--------------------------------------------------


-- ESSENCIAIS

vRP.upgradeThirst(id,amount)
-- Aumenta a sede de um personagem (positivamente / melhora / quer dizer menos sede)

vRP.downgradeThirst(id,amount)
-- Diminui a sede de um personagem (negativamente / piora / quer dizer mais sede)

vRP.upgradeHunger(id,amount)
-- Aumenta a fome de um personagem (positivamente / melhora / quer dizer menos fome)

vRP.downgradeHunger(id,amount)
-- Diminui a fome de um personagem (negativamente / piora / quer dizer mais fome)

vRP.upgradeStress(id,amount)
-- Aumenta o stress de um personagem (positivamente / melhora / quer dizer menos stress)

vRP.downgradeStress(id,amount)
-- Diminui o stress de um personagem (negativamente / piora / quer dizer mais stress)


--------------------------------------------------


-- LOGS

exports['vrp']:saveLog(webhook,log)
-- Salva uma log no webhook informado.
-- Só será enviada a log caso a convar 'production' esteja definida como "true" no server.cfg

exports['vrp']:createLog(url,title,fields)
-- Salva uma log no webhook informado.
-- Só será enviada a log caso a convar 'production' esteja definida como "true" no server.cfg
-- url: string - webhook url
-- title: string - titulo da log
-- fields: table - campos ( ex: { {'staff',characterId}, {'ação','ativou o wall'} } )

--------------------------------------------------


-- ENTRADA

RegisterServerEvent('SNT/C/setReady')
AddEventHandler('SNT/C/setReady',function(src,characterId)
    -- evento chamado quando um player conecta no servidor e seleciona um personagem.
end)


--------------------------------------------------


-- SAÍDA

RegisterServerEvent('SNT/playerLeft')
AddEventHandler('SNT/playerLeft',function(src,characterId)
    -- evento chamado quando um player desconecta do servidor.
end)


--------------------------------------------------


-- RESTART

exports['vrp']:setRestarting(bool)
-- bool: true / false 
-- Define se o servidor está prestes a reiniciar ou não. 
-- Útil para integração com outros sistemas (ex: desativar o uso próximo ao reinício do servidor).
-- Também desativa novas conexões, informando que o servidor será reiniciado em breve.
-- Por padrão este export já é utilizado no comando 'rr' disponbilizado no core.

exports['vrp']:isRestarting()
-- Retorna se o servidor está reiniciando ou não, útil para realizar a integração supramencionada.


--------------------------------------------------

-- MANUTENÇÃO

exports['vrp']:setMaintence(bool)
-- bool: true / false 
-- Define se o servidor está prestes em manutenção ou não.
-- Libera a entrada somente de jogadores com 'staff' = 1 na tabela snt_characters.

exports['vrp']:isMaintence()
-- Retorna se o servidor está em manutenção ou não.

-- O modo manutenção também pode ser ativado/desativado usando o comando !man no console.

--------------------------------------------------
</code></pre>

### <mark style="color:blue;">• (Client) Proxy / exports / events</mark>&#x20;

<pre class="language-lua" data-overflow="wrap"><code class="lang-lua">--------------------------------------------------


-- JOGADORES PRÓXIMOS
<strong>
</strong><strong>vRPclient.nearestPlayers(src,radius)
</strong>-- Retorna uma tabela ([source] = distancia) com os jogadores próximos.

vRPclient.nearestPlayer(src,radius)
-- Retorna a source do jogador mais próximo.

--------------------------------------------------


-- VIDA

vRPclient.getHealth(src)
-- Retorna a vida atual do personagem.

vRPclient.setHealth(src,value)
-- Define a vida do personagem para o valor passado.

vRPclient.updateHealth(src,value)
-- Aumenta a vida do personagem no valor passado.

vRPclient.downHealth(src,value)
-- Diminui a vida do personagem no valor passado.


--------------------------------------------------


-- COLETE

vRPclient.setArmour(src,value)
-- Define o colete do personagem para o valor passado.


--------------------------------------------------


-- ENTRADA

RegisterNetEvent('SNT/C/setReady')
AddEventHandler('SNT/C/setReady',function(characterId)
    -- evento chamado quando um player conecta no servidor e seleciona um personagem.
end)

-- No client também é possível obter o ID do personagem que o jogador está conectado através do state 'characterId':
local id = LocalPlayer.state['characterId']


--------------------------------------------------
</code></pre>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://base.snt.gg/vrp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
