THE ORB
Iniciando o studio

Entrada duplicada '<valor>' para a chave '<índice>'

Um script tentou salvar algo que já existe, normalmente um jogador sendo adicionado duas vezes.

groupsNão salva nada daquele jogadorcodePrecisa de um desenvolvedor

Faça isto primeiro

Se acontece em toda entrada, o script insere sem conferir antes. Reporte para o autor.

bug_reportMelhor colar o console inteiro

O que significa

Um INSERT tentou escrever um valor que uma chave UNIQUE ou PRIMARY já tem. O MySQL recusou a instrução inteira. A mensagem nomeia o valor e o índice com o qual colidiu, e juntos eles identificam a linha.

O que causa isso

Ordenado pela frequência com que é a resposta.

  1. 1

    Inserir um jogador que já existe

    Um handler de playerConnecting ou de primeira entrada que insere sem condição. Segunda entrada, mesmo identificador, colisão.

  2. 2

    Um handler registrado duas vezes

    O mesmo evento amarrado em dois arquivos, ou um resource reiniciado sem que o handler dele fosse limpo, então cada ação roda duas vezes.

  3. 3

    Uma nova tentativa depois de um timeout que na verdade deu certo

    O primeiro insert funcionou e a resposta se perdeu; a nova tentativa colide.

  4. 4

    Dois servidores em um único banco de dados

    Uma máquina de desenvolvimento e uma no ar compartilhando credenciais.

  5. 5

    Um id gerado do lado do cliente

    Qualquer coisa que o cliente forneça como chave primária vai se repetir mais cedo ou mais tarde.

Como saber qual é o seu

Procure a linha que já está lá:

SELECT * FROM users WHERE identifier = 'o-valor-da-mensagem';

Se parece um jogador legítimo que já existia, o insert nem deveria ter rodado. Se é uma duplicata de uma linha criada há segundos, você está inserindo duas vezes.

Onde olhar

O INSERT do resource, e se alguma coisa checa antes se já existe.

Como consertar

Diga o que deveria acontecer numa colisão em vez de deixar dar erro:

-- manter a linha que já está, não fazer nada
INSERT IGNORE INTO users (identifier, name) VALUES (?, ?)

-- ou atualizar ela
INSERT INTO users (identifier, name) VALUES (?, ?)
ON DUPLICATE KEY UPDATE name = VALUES(name)

Ainda 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 Fixer

Para esse tipo de erro, o Script Optimizer detecta os padrões de consulta que causam isso.

Erros que andam junto com este