randol_notes — Manual
Bloco de notas como item do ox_inventory: cada bloco tem um ID próprio, guarda várias notas no banco e permite destacar uma folha, que vira um item entregável a outro jogador.
Sumário
- Dependências
- Instalação
- Itens do ox_inventory
- Fluxo de uso
- Banco de dados
- Entrypoints para outros recursos
- Estrutura de arquivos
Dependências
| Recurso | Obrigatório | Observação |
|---|---|---|
qb-core, es_extended ou ND_Core | Sim | Bridge automático em bridge/. O bridge ND exige ND_Core 2.0.0+ |
ox_lib | Sim | lib.callback, lib.registerContext, lib.inputDialog |
ox_inventory | Sim | Obrigatório de verdade: sv_notes.lua usa exports.ox_inventory direto e registra o hook createItem. Não funciona com outro inventário |
oxmysql | Sim | Persistência das notas na tabela rnotes |
Instalação
- Copie a pasta
randol_notespararesources/. - Adicione ao
server.cfg:ensure randol_notes - Cadastre os itens
notepadetornnotenoox_inventory(ver abaixo) e copieimages/notepad.pngeimages/tornnote.pngpara a pasta de imagens do inventário. - Não é preciso importar SQL: a tabela
rnotesé criada automaticamente no start do recurso.
Itens do ox_inventory
Em ox_inventory/data/items.lua:
["notepad"] = {
label = "Notepad",
weight = 0,
stack = false,
close = true,
consume = 0,
description = "Sometimes handy to remember something :)",
server = {
export = 'randol_notes.notepad',
},
},
["tornnote"] = {
label = "Torn Note",
weight = 0,
stack = false,
close = false,
},Se renomear o item notepad, é preciso trocar o nome também no itemFilter do hook createItem, no fim de sv_notes.lua:
}, {
print = false,
itemFilter = {
notepad = true
}
})Fluxo de uso
- Criação do bloco — o hook
createItemdo ox_inventory intercepta cadanotepadcriado, gera umnoteidalfanumérico único de 8 caracteres, marca o item comounique, escreve a descrição (Barcode: <noteid>+ dono) e insere a linha correspondente emrnotes. - Usar o item abre o menu “Bloco de Notas” com a animação de prancheta (props
prop_notepad_01eprop_pencil_01na mão). - Nova nota — abre um input com o texto, a opção assinar e a opção destacar:
- sem destacar: a nota é gravada no bloco (JSON na coluna
notes); - destacando: nada é gravado — o jogador recebe direto um item
tornnotecom o texto na metadata.
- sem destacar: a nota é gravada no bloco (JSON na coluna
- Minhas anotações — lista as notas do bloco (as mais recentes primeiro), com preview de 10 caracteres, data e se está assinada ou anônima. O texto completo aparece na metadata do contexto.
- Ao abrir uma nota salva, é possível excluir ou destacar — destacar remove a nota do bloco e devolve um item
tornnotecom data, autor (nome do personagem se assinada, senãoUnsigned) e o texto na descrição.
O tornnote é um item comum: pode ser entregue a outro jogador, e o texto fica visível na descrição do item.
Banco de dados
Criada automaticamente no start do recurso:
CREATE TABLE IF NOT EXISTS `rnotes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`noteid` varchar(50) NOT NULL DEFAULT '0',
`citizenid` varchar(100) NOT NULL DEFAULT '0',
`notes` longtext NOT NULL,
PRIMARY KEY (`id`)
);| Coluna | Descrição |
|---|---|
noteid | ID do bloco, igual ao metadata.noteid do item. É a chave usada em todas as consultas |
citizenid | Identificador do personagem que criou o bloco |
notes | Array JSON de notas (id, text, signed, date) |
As notas ficam vinculadas ao bloco, não ao personagem: quem estiver com o item lê o conteúdo.
Entrypoints para outros recursos
O recurso registra o export notepad, consumido pelo ox_inventory como handler de uso do item:
exports('notepad', function(event, item, inventory, slot, data)
-- abre o bloco de notas para inventory.id usando o metadata.noteid
end)Estrutura de arquivos
randol_notes/
├── bridge/
│ ├── client/
│ │ ├── esx.lua — notificação no ESX
│ │ ├── nd.lua — notificação no ND_Core
│ │ └── qb.lua — notificação no QB
│ └── server/
│ ├── esx.lua — GetPlayer, identificador e nome do personagem no ESX
│ ├── nd.lua — GetPlayer, identificador e nome do personagem no ND_Core
│ └── qb.lua — GetPlayer, citizenid e nome do personagem no QB
├── cl_notes.lua — menus de contexto, input de nota, animação e props
├── sv_notes.lua — hook createItem, CRUD das notas, tornnote, tabela rnotes
├── images/
│ ├── notepad.png — ícone do item notepad
│ └── tornnote.png — ícone do item tornnote
└── fxmanifest.lua