Spawn
Tela de seleção de personagem. Cada personagem aparece em uma cena própria no mapa, conforme o emprego ou o veículo dele. O script também trata a escolha do local de entrada, a compra de vagas e a exclusão e a restauração de personagens.
Precisa de: krs, loading, creator
Funciona só com o framework krs.
Opcionais:
| Script | Com ele |
|---|---|
skinshop | O personagem aparece na cena com as roupas dele |
kay_housing | As casas do jogador entram na lista de locais |
time_system | Cada cena trava a própria hora e o próprio clima |
Instalação
ensure krs
ensure loading
ensure spawn
ensure creatorColoque depois do loading e antes do creator. Não há SQL para importar. Veja a ordem completa.
Como funciona
- Quem já tem personagem vê as cenas de
Config.Intro.Returning. Quem não tem vê as deConfig.Intro.New, depois vai direto para o criador. - Na seleção, o jogador navega pelos personagens. Depois do último item, aparece a vaga livre ou a compra de vaga.
- Ao entrar pela primeira vez desde que o servidor ligou, o personagem escolhe o local de entrada. Nas entradas seguintes, ele aparece onde parou.
| Tecla | Na seleção |
|---|---|
← → ou A D | Troca de personagem |
Enter | Entra, cria ou compra, conforme o item |
Delete | Abre a exclusão do personagem |
Esc | Cancela a compra de vaga |
| Tecla | Na lista de locais |
|---|---|
↑ ↓ ou W S | Troca de local |
Enter | Confirma o local |
Durante as cenas de abertura, segurar ESPAÇO pula, e M liga ou desliga a música. Quem nunca assistiu à chegada e não tem personagem não pode pular.
Lista de locais
A ordem da lista é esta:
Onde parei, com a última posição.- Casas do
kay_housing. - Locais de trabalho de
Config.Jobs, para quem tem o emprego. Config.Places.
Cena de cada personagem
O script escolhe a cena nesta ordem:
- A cena do primeiro emprego do personagem na ordem de
Config.JobOrder. Config.Select.Car, se ele tem um veículo próprio disponível. O carro da cena usa o modelo e a placa dele. Veículo de trabalho, apreendido ou com aluguel vencido não conta.- Uma cena de
Config.Select.Daily, fixa para cada passaporte. Config.Select.Default.
Vagas e mensalidade
Os preços usam os diamantes da conta. Comprar vaga pede uma segunda confirmação na tela.
Um personagem com mensalidade de visual vencida não entra. A tela mostra Mensalidade vencida e oferece a renovação por SkinMontlyPrice.
Apagar e restaurar
Para apagar, o jogador digita o nome e o sobrenome do personagem e espera Config.Delete.Wait segundos. O personagem sai da conta, mas continua no banco, e o krs registra a exclusão no log Delete, com o comando de restauração.
Comandos
| Comando | O que faz |
|---|---|
/restaurar <passaporte> | Devolve um personagem apagado à conta. Funciona também no console do servidor |
/restaurar 1234Se a conta ficar com mais personagens do que vagas, ela só cria outro depois de liberar vaga.
Permissão
/restaurar exige o grupo Admin no nível Config.Restore.Level ou mais alto. O número menor é o cargo mais alto, e o padrão é 2.
Configuração
Tudo fica em shared-side/shared.lua. O nome da cidade fica em City.Name, no loading.
Preços
| Opção | Padrão | O que muda |
|---|---|---|
SlotPrice | 10000 | Preço de uma vaga, em diamantes |
SkinMontlyPrice | 10000 | Preço de renovar a mensalidade, em diamantes |
SkinDuration | 2592000 | Duração da renovação, em segundos (30 dias) |
Abertura e seleção
| Opção | Padrão | O que muda |
|---|---|---|
Intro.New | vazio | Números das cenas de Takes para quem não tem personagem |
Intro.Returning | { 5 } | Números das cenas de Takes para quem já tem personagem |
Intro.SkipHold | 1200 | Tempo segurando ESPAÇO para pular, em ms |
Takes | 5 cenas | Movimentos de câmera com From, To, Duration, Fov, Hour, Minute, Weather, Place e Text |
Select.Default | "Praca" | Cena usada quando nenhuma outra se aplica |
Select.Daily | Praca, Parque, Orla, Calcada, Pier | Cenas para quem não tem emprego nem veículo |
Select.Car | "Carro" | Cena de quem tem veículo próprio |
Select.Free | "Chegada" | Cena da vaga livre |
Select.Buy | "Vaga" | Cena da compra de vaga |
Select.FallbackScenario | "WORLD_HUMAN_STAND_IMPATIENT" | Pose usada quando a animação ou o assento falham |
Select.Jobless | "Cidadão" | Texto para quem não tem emprego |
Delete.Wait | 3 | Espera na tela de exclusão, em segundos |
Restore.Command | "restaurar" | Nome do comando |
Restore.Level | 2 | Nível mínimo do grupo Admin |
Cenas (Config.Scenes)
Cenas padrão: Carro, Praca, Parque, Orla, Calcada, Pier, Delegacia, Xerife, Floresta, Hospital, Oficina, Quebrada, Noite, Chegada e Vaga.
Delegacia = {
Label = "Delegacia",
Coords = vec4(447.6,-1019.5,28.45,180.0),
Scenario = "WORLD_HUMAN_COP_IDLES",
Vehicle = { Model = "police3", Offset = vec3(0.0,-1.6,0.0), Heading = 90.0, Siren = true, Lights = true },
Camera = { Offset = vec3(1.2,4.0,0.35), Look = vec3(-0.8,0.0,0.05), Fov = 40.0 },
Tag = "right", Hour = 18, Minute = 30, Weather = "CLEAR"
},| Campo | O que muda |
|---|---|
Label | Nome da cena na lista de Preview |
Coords | Posição e direção do personagem |
Anim | Animação com Dict, Name e Flag |
Scenario | Cenário usado quando não há animação ou ela falha |
Spot | Procura um assento ou encosto em Radius metros, entre os tipos de Types |
Standing | Cenário usado se Spot não encontrar lugar |
Vehicle | Veículo com Model, Offset e Heading. Aceita Own, Lights, Siren, Doors e Livery |
Props | Objetos presos ao personagem, com Model, Offset, Rotation e Bone |
Camera | Offset, Look e Fov, relativos ao personagem, ou Coords, Rotation, Fov e Load, em ponto fixo |
Tag | Lado da etiqueta: "right" ou "left" |
Hour, Minute, Weather | Hora e clima |
Ipl | Lista de IPLs carregados na cena |
Interior | true espera o interior carregar |
Own = true troca o veículo da cena pelo veículo do personagem.
Empregos
Config.JobOrder = { "LSPD", "BCSO", "SAPR", "Paramedico", "Bennys", "Bahamas", "Restaurante", "Families", "Ballas", "Vagos", "Marabunta", "Aztecas" }
Config.Jobs = {
LSPD = { Label = "Polícia", Scene = "Delegacia", Spawn = { Name = "Delegacia", Coords = vec3(427.0,-979.5,30.7) } },
Restaurante = { Label = "Restaurante", Scene = "Noite" }
}O grupo precisa estar em Config.JobOrder e em Config.Jobs. Label é o texto do emprego, Scene é a cena e Spawn é o local de trabalho na lista de locais. Sem Spawn, o emprego não adiciona local.
Locais
| Opção | Padrão | O que muda |
|---|---|---|
Places | 8 locais | Lista fixa com Coords, Name e Info. Com Name = "", o script usa o nome da região |
PlaceCamera.Height | 420.0 | Altura da câmera, em metros |
PlaceCamera.Pitch | -72.0 | Inclinação da câmera |
PlaceCamera.Fov | 50.0 | Campo de visão |
PlaceCamera.Move | 1500 | Duração do movimento entre locais, em ms |
{ Coords = vec3(449.71,-659.27,28.48), Name = "Rodoviária", Info = "Centro" },Para programadores
-- servidor: cria o personagem e faz o login. Retorna o id ou false
local charId = exports.spawn:CreateCharacter(source, "Ana", "Souza", "mp_f_freemode_01")
-- servidor: ensaio do criador, exige grupo Admin nível 2 ou mais alto
exports.spawn:Rehearse(source)
-- servidor: encerra o ensaio da license e apaga o personagem de teste. Retorna true ou false
local eraEnsaio = exports.spawn:EndRehearsal(license, charId)
-- cliente: reabre a seleção na primeira vaga livre, se houver
exports.spawn:Reopen()
-- cliente: mostra uma cena pelo número, na ordem alfabética das chaves de Config.Scenes
exports.spawn:Preview(3)
-- cliente: sem número válido, encerra a prévia e lista as cenas em uma notificação
exports.spawn:Preview()
-- cliente: aviso na tela do spawn
TriggerClientEvent("spawn:Notify", source, "Atenção", "Mensagem.", "amarelo")No ensaio, o administrador sai do personagem atual e percorre a criação com um personagem de teste, que não conta no limite de vagas. O teste termina com o personagem apagado e a volta à seleção.
O krs dispara o evento de cliente spawn:Finish(Coords, Created) depois do login. Durante a seleção, o cliente mantém LocalPlayer.state.Spawning como true.
O creator carrega client-side/helpers.lua deste script. Mantenha o arquivo no lugar.
Problemas comuns
| Mensagem | Causa |
|---|---|
O resource creator não está ligado. Avise a equipe. | O creator não está ligado |
Limite de personagem atingido. | A conta usou todas as vagas |
Diamantes insuficientes. | A conta não tem diamantes para a vaga |
O nome digitado não confere. | O texto digitado difere do nome e sobrenome |
Personagem indisponível. | O personagem não é da conta ou está apagado |
