Damage System
Retorno de combate: hitmarker e som de acerto, confirmação de abate com sequência, número de dano na tela, passaporte de quem você acertou e mira personalizada com presets. Também traz espiar pela quina, escalada de bordas e inspecionar a arma. Cada jogador ajusta o seu e os ajustes ficam salvos no banco.
Precisa de: oxmysql, ox_lib, krs_helper
Instalação
ensure damage_systemColoque depois do krs_helper. A tabela é criada sozinha. Veja a ordem de instalação.
Comandos e teclas
| Comando ou tecla | O que faz |
|---|---|
/hit | Abre o painel de ajustes |
/mira | Abre o painel na aba da mira |
/inspecionar | Inspeciona a arma. Tecla padrão: botão do meio do mouse |
Q e E, mirando | Espia pela esquerda e pela direita |
O jogador troca as teclas em Configurações > Teclas > FiveM.
A escalada de bordas não tem tecla. O personagem agarra a borda ao pular ou cair perto dela.
Painel
| Aba | O que tem |
|---|---|
| Hit e abate | Volume, som de abate, som de acerto, efeito de abate, cor, NPCs e passaporte no hit |
| Dano na tela | Liga ou desliga, cor no corpo, cor na cabeça, opacidade e tamanho |
| Mira | Forma, tamanho, espaço, espessura, cor, sempre visível e presets salvos |
A opção "Sequência" do som de abate toca um som por abate seguido, até 5.
Permissão
Por padrão, todos usam tudo. Para restringir, liste os grupos em Groups. O servidor confere.
Config.Groups = {
Menu = { "Admin" },
Crosshair = { "Policia", "Admin-2" },
HitFeed = {}
}| Campo | O que libera |
|---|---|
Menu | Abrir o painel pelo /hit |
Crosshair | Mira personalizada e /mira |
HitFeed | Receber o passaporte de quem acertou |
Sem o grupo de Menu, o /mira abre só a aba da mira, e o servidor grava só os campos da mira.
Sons
O script vem sem arquivos de som. Os botões tocam sons nativos do GTA, que não seguem o volume do painel. Volume 0 deixa mudo.
Para usar os seus:
- Coloque os arquivos
.mp3,.oggou.wavemnui/sounds/. - Liste em
Config.Sounds:
Config.Sounds = {
Kill = { "sounds/a.mp3", "sounds/b.mp3" },
Streak = {}
}- Rode
restart damage_system.
Kill aceita até 10 arquivos, na ordem dos botões 01 a 10. Botão sem arquivo usa KillNative. Streak aceita até 5 arquivos, um por abate seguido. Vazio usa StreakNative. Também vale URL https://.
Configuração
Tudo fica em config/config.lua. Só precisa ter o que você mudou. Os textos ficam em locales/*.json.
Geral
| Opção | Padrão | O que muda |
|---|---|---|
Command | "hit" | Comando do painel. "" desliga |
CrosshairCommand | "mira" | Comando da mira. "" desliga |
InspectCommand | "inspecionar" | Comando de inspecionar. "" desliga |
InspectKey | "MOUSE_MIDDLE" | Tecla padrão de inspecionar |
InspectKeyMapper | "MOUSE_BUTTON" | "MOUSE_BUTTON" para mouse, "keyboard" para teclado |
CrosshairPresetSlots | 3 | Presets de mira por jogador |
StreakWindow | 30000 | Tempo entre abates para a sequência subir, em ms |
Panel | Tone = "#b3c0ff", Background = "rgba(12, 13, 17, 0.95)", Text = "#f3f1ed", Font = "" | Visual do painel. Font vazio usa a fonte padrão |
LogKills | false | Registra abates confirmados no log do krs_helper |
Detecção e abate
| Opção | Padrão | O que muda |
|---|---|---|
HitFeed | true | false desliga o passaporte no hit para todos |
ForceKill | true | O servidor confirma o abate e a vítima cai na hora. false deixa só o jogo decidir |
DeathHealth | 100 | Vida em que o jogador conta como caído |
DeathEvent | Name = "player:Death", Server = true | Evento disparado quando o abate derruba a vítima. Name = "" desliga |
MaxHitDistance | 500.0 | Distância máxima entre atirador e vítima, em metros |
KillDamageWindow | 1500 | Janela em que o servidor soma o dano na vítima, em ms |
HitCooldown | 80 | Intervalo mínimo entre sons de acerto na mesma vítima, em ms |
KillDeduplicationTime | 15000 | Tempo máximo que um abate fica marcado para não contar de novo, em ms |
KillSyncWindow | 1000 | Quanto o cliente espera a vítima cair depois de um acerto, em ms |
FatalHitWindow | 300 | Espera antes de aplicar o abate confirmado na vítima, em ms |
Padrões do jogador
Ficam em DefaultSettings. O botão "Restaurar padrão" do painel volta para estes valores.
| Opção | Padrão | O que muda |
|---|---|---|
soundId | 0 | Som de abate. 0 desligado, 1 a 10 botões, 11 sequência |
visualState | 0 | Efeito de abate. 0 desligado, 1 a 5 efeitos |
bodySound | 0 | Som de acerto. 0 desligado, 1 a 10 botões |
hitFeedState | false | Passaporte no hit |
volume | 0.5 | Volume de 0.0 a 1.0 |
color | "#03ecfc" | Cor dos efeitos |
npcState | false | Hit, abate e dano também em NPCs |
damageState | true | Mostra o dano na tela |
damageColor | "#DCDCDC" | Cor do dano no corpo |
headshotColor | "#FF3B3B" | Cor do dano na cabeça |
damageOpacity | 0.95 | Opacidade, de 0.1 a 1.0 |
damageSize | 15 | Tamanho, de 10 a 32 |
crosshairEnabled | false | Mira personalizada |
crosshair | size = 13, gap = 1, width = 2, height = 2, color = "#FFFFFF", demais false | Formato da mira. Demais: circular, tstyle, bordered, alwaysOn |
Movimento
Fica em Movement.
| Opção | Padrão | O que muda |
|---|---|---|
Models | mp_m_freemode_01, mp_f_freemode_01 | Modelos que podem espiar e escalar |
BlockedStates | Carry, Commands, Buttons, Cancel | Statebags que bloqueiam espiar e escalar |
AntiSlide | true | Liga o anti-deslize |
Peek | Padrão | O que muda |
|---|---|---|
Enabled | true | Liga o espiar |
Keys | esquerda = "Q", direita = "E" | Teclas padrão |
AllowFirstPerson | true | Permite espiar em primeira pessoa |
MaxSpeed | 4.5 | Acima dessa velocidade, correndo, não espia |
MouseSensitivity | 8.0 | Sensibilidade da câmera ao espiar |
Reticle | true | Desenha um ponto na tela quando a mira personalizada está desligada |
Peek.Weapons define o perfil por arma ou grupo. default vale para o resto. Pode criar chaves novas:
WEAPON_PISTOL = { lean = 0.8 }| Campo | Padrão (default) | O que muda |
|---|---|---|
enabled | true | Permite espiar com a arma. Sniper, pesada, arremesso, corpo a corpo e desarmado vêm com false |
lean | 1.0 | Inclinação do corpo, de 0.1 a 1.0 |
cameraLeft | 0.20 | Deslocamento da câmera à esquerda |
cameraRight | 0.30 | Deslocamento da câmera à direita |
clearance | 0.42 | Espaço livre exigido ao lado |
Ledge | Padrão | O que muda |
|---|---|---|
Enabled | true | Liga a escalada |
ClimbFast | false | Usa a escalada rápida do jogo |
Cooldown | 100 | Tempo entre escaladas, em ms |
MinReach | 0.0 | Menor altura da borda, em metros |
MaxReach | 2.0 | Maior altura da borda, em metros |
WallDistance | 0.8 | Distância de procura da parede |
WallProbeHeight | 0.2 | Altura inicial da procura |
Prediction | 0.15 | Quanto a velocidade aumenta a procura |
Angles | 0.0, -30.0, 30.0 | Ângulos da procura |
MinApproach | 0.25 | Velocidade mínima em direção à parede |
NoRagdollWhileFalling | true | Evita o ragdoll durante a queda |
MaxFallSpeed | 9.0 | Caindo mais rápido que isso, não agarra |
Para programadores
Quando o abate confirmado derruba a vítima, o cliente dela dispara DeathEvent com (atirador, arma):
-- Server = true
RegisterNetEvent("player:Death", function(shooter, weapon) end)Com Server = false, o evento é local no cliente.
Statebags lidos: Safezone, que impede o abate confirmado, Handcuff e os de Movement.BlockedStates.
Para enviar os abates ao Discord, ligue LogKills e use a convar do krs_helper:
set krs_helper_webhook "URL_DO_SEU_WEBHOOK"Problemas comuns
| Mensagem | Causa |
|---|---|
tabela killconfirm_settings não ficou pronta | O banco não respondeu ao iniciar. Os ajustes valem só até o jogador sair |
animação krs@peek não carregou | A animação não carregou em 5 segundos e o espiar fica desligado até reiniciar |
