Skip to content

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:

ScriptCom ele
skinshopO personagem aparece na cena com as roupas dele
kay_housingAs casas do jogador entram na lista de locais
time_systemCada cena trava a própria hora e o próprio clima

Instalação ​

cfg
ensure krs
ensure loading
ensure spawn
ensure creator

Coloque depois do loading e antes do creator. Não há SQL para importar. Veja a ordem completa.

Como funciona ​

  1. Quem já tem personagem vê as cenas de Config.Intro.Returning. Quem não tem vê as de Config.Intro.New, depois vai direto para o criador.
  2. Na seleção, o jogador navega pelos personagens. Depois do último item, aparece a vaga livre ou a compra de vaga.
  3. Ao entrar pela primeira vez desde que o servidor ligou, o personagem escolhe o local de entrada. Nas entradas seguintes, ele aparece onde parou.
TeclaNa seleção
← → ou A DTroca de personagem
EnterEntra, cria ou compra, conforme o item
DeleteAbre a exclusão do personagem
EscCancela a compra de vaga
TeclaNa lista de locais
↑ ↓ ou W STroca de local
EnterConfirma 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:

  1. Onde parei, com a última posição.
  2. Casas do kay_housing.
  3. Locais de trabalho de Config.Jobs, para quem tem o emprego.
  4. Config.Places.

Cena de cada personagem ​

O script escolhe a cena nesta ordem:

  1. A cena do primeiro emprego do personagem na ordem de Config.JobOrder.
  2. 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.
  3. Uma cena de Config.Select.Daily, fixa para cada passaporte.
  4. 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 ​

ComandoO que faz
/restaurar <passaporte>Devolve um personagem apagado à conta. Funciona também no console do servidor
/restaurar 1234

Se 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çãoPadrãoO que muda
SlotPrice10000Preço de uma vaga, em diamantes
SkinMontlyPrice10000Preço de renovar a mensalidade, em diamantes
SkinDuration2592000Duração da renovação, em segundos (30 dias)

Abertura e seleção ​

OpçãoPadrãoO que muda
Intro.NewvazioNú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.SkipHold1200Tempo segurando ESPAÇO para pular, em ms
Takes5 cenasMovimentos 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.DailyPraca, Parque, Orla, Calcada, PierCenas 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.Wait3Espera na tela de exclusão, em segundos
Restore.Command"restaurar"Nome do comando
Restore.Level2Ní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.

lua
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"
},
CampoO que muda
LabelNome da cena na lista de Preview
CoordsPosição e direção do personagem
AnimAnimação com Dict, Name e Flag
ScenarioCenário usado quando não há animação ou ela falha
SpotProcura um assento ou encosto em Radius metros, entre os tipos de Types
StandingCenário usado se Spot não encontrar lugar
VehicleVeículo com Model, Offset e Heading. Aceita Own, Lights, Siren, Doors e Livery
PropsObjetos presos ao personagem, com Model, Offset, Rotation e Bone
CameraOffset, Look e Fov, relativos ao personagem, ou Coords, Rotation, Fov e Load, em ponto fixo
TagLado da etiqueta: "right" ou "left"
Hour, Minute, WeatherHora e clima
IplLista de IPLs carregados na cena
Interiortrue espera o interior carregar

Own = true troca o veículo da cena pelo veículo do personagem.

Empregos ​

lua
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çãoPadrãoO que muda
Places8 locaisLista fixa com Coords, Name e Info. Com Name = "", o script usa o nome da região
PlaceCamera.Height420.0Altura da câmera, em metros
PlaceCamera.Pitch-72.0Inclinação da câmera
PlaceCamera.Fov50.0Campo de visão
PlaceCamera.Move1500Duração do movimento entre locais, em ms
lua
{ Coords = vec3(449.71,-659.27,28.48), Name = "Rodoviária", Info = "Centro" },

Para programadores ​

lua
-- 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 ​

MensagemCausa
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