Erro: CPed::SetVariation: variação inválida (slotId, drawblId, texId)
Um script tentou colocar num personagem uma roupa que ele não tem, normalmente dados de um traje salvo de outro modelo de personagem.
Faça isto primeiro
Sozinho é inofensivo. Se o traje de alguém está errado, a aparência salva dele é de outro modelo.
O que significa
Alguma coisa pediu a um ped para vestir um componente de roupa ou uma textura que não existe para o modelo dele. Os três números são a mensagem inteira:
• slotId — qual slot de componente (0 rosto, 1 máscara, 3 braços, 4 pernas, 6 sapatos, 8 camiseta interna, 11 torso, e assim por diante)
• drawblId — qual drawable dentro daquele slot
• texId — qual variante de textura daquele drawable
O jogo se recusa e deixa o ped com o que já estava vestindo. Nada cai, então isso enche o console em vez de quebrar algo; mas um slot que não se aplica em silêncio costuma ser um problema do guarda-roupa ou de um ped adicionado que vale a pena consertar em vez de silenciar.
O que causa isso
Ordenado pela frequência com que é a resposta.
- 1
O drawable ou a textura não existem para aquele modelo
Cada modelo de ped tem uma quantidade diferente por slot. Um número válido para
mp_m_freemode_01pode estar fora do intervalo para ummp_f_freemode_01ou para um ped adicionado, e os números não se transferem entre eles. - 2
Dados de roupa salvos para outro modelo
O jogador trocou de modelo (de homem para mulher, de freemode para um ped adicionado) e dados de aparência antigos foram aplicados no novo. Essa é de longe a versão mais comum, e dispara vários destes de uma vez no spawn.
- 3
Roupa adicionada que não é transmitida
O menu de guarda-roupa lista um drawable que o servidor não transmite de verdade, então o índice existe na configuração e não no jogo.
- 4
O componente foi aplicado antes de o modelo terminar de carregar
Colocar variações num ped cujo modelo não tinha carregado por completo dá um ped que ainda não tem variações para escolher.
- 5
Contar a partir da base errada
GetNumberOfPedDrawableVariationsdevolve uma QUANTIDADE; os drawables válidos vão de 0 a quantidade-1. Passar a quantidade em si é um erro de um, e produz exatamente isso no último slot sempre.
Como saber qual é o seu
Pergunte ao jogo o que é válido para aquele ped, logo antes da chamada:
local ped = PlayerPedId()
print(GetEntityModel(ped),
GetNumberOfPedDrawableVariations(ped, 11),
GetNumberOfPedTextureVariations(ped, 11, drawable))Se o número que você está colocando é igual ou maior do que o que ele informa, está fora do intervalo para este modelo. Se dispara em rajada no spawn, são dados salvos de outro modelo.
Onde olhar
O que aplica a aparência: o resource de roupa ou de skin, e a linha de aparência salva daquele jogador.
Como consertar
Ajuste contra o que o modelo tem de verdade, e pule em vez de forçar:
local function setComponent(ped, slot, drawable, texture)
local maxDrawable = GetNumberOfPedDrawableVariations(ped, slot)
if drawable >= maxDrawable then return end -- 0..max-1
local maxTexture = GetNumberOfPedTextureVariations(ped, slot, drawable)
if texture >= maxTexture then texture = 0 end
SetPedComponentVariation(ped, slot, drawable, texture, 0)
endE guarde o modelo junto com a aparência, para que os dados de um ped nunca sejam aplicados em outro:
if saved.model ~= GetEntityModel(ped) then
return applyDefaultAppearance(ped)
endAinda travado no seu próprio código?
Esta página é o que esse erro costuma significar. Cole o seu console no Server Fixer e ele vai ordenar tudo o que estiver lá e te dizer o que fazer primeiro; e se você preferir não mexer, o ORBIE consegue consertar o script e te devolver o resource pronto para soltar.
bug_reportAbrir o Server FixerPara esse tipo de erro, o GLB to FiveM Converter constrói assets para streaming que carregam de primeira.