Por que isso importa para o seu servidor
Evento é o que segura jogador em horário morto. O problema é que evento feito à mão exige GM presente, e GM presente é a coisa mais escassa de qualquer projeto — principalmente às três da tarde de uma terça.
Este motor tira o GM da equação. Você define os horários uma vez, e a partir daí o servidor abre a inscrição, espera o mínimo de jogadores, teleporta, roda, apura e paga. Se ninguém se inscreve, ele cancela e tenta no próximo horário, sem deixar nada quebrado.
Existe até um recurso para o pior cenário — servidor com pouca gente online: os Fake Players entram para completar o time e o evento acontece mesmo assim.
Você não precisa abrir o arquivo
Antes de qualquer coisa sobre XML: o motor inteiro é editável de dentro do jogo. A Community Board tem uma aba de eventos que lista os oito, com o estado de cada um e o que dá para fazer com ele.
Active: - Reward shop | Reload | Engine settings
Id Event State Actions
1 Death Match off Edit | Enable | Start
2 Team Vs Team off Edit | Enable | Start
3 Capture The Flag off Edit | Enable | Start
4 Party Event off Edit | Enable | Start
5 Spoil Event off Edit | Enable | Start
6 Fight Boss off Edit | Enable | Start
7 Hunting Grounds off Edit | Enable | Start
8 Battle Royale off Edit | Enable | Start
| Ação | O que faz |
|---|---|
Edit | Abre o evento para editar horário, recompensa, mapa e regras. |
Enable | Liga ou desliga o evento, o mesmo que o enabled do XML. |
Start | Dispara o evento agora, fora da agenda. |
Reward shop | Abre a loja de troca de pontos, sem precisar do .eventexchange. |
Reload | Recarrega a configuração. |
Engine settings | As regras globais do motor — nível, inscritos, limite por IP, intervalo. |
Active | Mostra qual evento está rodando neste momento. |
As três garantias do painel
O rodapé da tela resume o contrato, e cada parte dele importa:
As edições são gravadas no
events.xmlcom backup datado e valem a partir da próxima ocorrência; um evento em andamento nunca é interrompido.
- Gravação no próprio XML. O painel não mantém uma configuração paralela: ele escreve no
events.xml. O que você vê no arquivo é o que está valendo, e o que você editar à mão continua sendo respeitado. - Backup datado a cada gravação. Toda edição deixa uma cópia do estado anterior. Errar um horário às duas da manhã deixou de ser um problema.
- O evento em andamento nunca é perturbado. A mudança entra na próxima ocorrência. Ninguém é teleportado para fora no meio de um TvT porque um GM ajustou a recompensa.
Na prática isso significa que um GM sem acesso ao servidor consegue operar os eventos: ligar, desligar, disparar fora de hora quando o servidor está cheio, corrigir uma recompensa errada. Sem SSH, sem FTP, sem reinício.
O Start é o mais subestimado. Servidor lotado num domingo à tarde, sem evento agendado? Um clique e ele começa.
O resto deste documento explica o que cada campo significa — vale ler mesmo usando o painel, porque os nomes são os mesmos nos dois lugares.
O cabeçalho: regras globais
<eventEngine enabled="true" fixedSchedule="false" increasePvp="true"
maxLevel="86" minLevel="1" maxParticipants="200"
participantsPerIp="0" registrationTime="1" timeBetweenEvents="1">
| Atributo | O que faz |
|---|---|
enabled | Liga ou desliga o motor inteiro. |
fixedSchedule | Com true, os eventos rodam exatamente nos horários listados. Com false, o motor tem liberdade para encaixar respeitando timeBetweenEvents. |
increasePvp | Se as mortes dentro do evento contam para o contador de PvP do personagem. |
minLevel / maxLevel | Faixa de nível aceita. Vale para todos os eventos. |
maxParticipants | Teto de inscritos por evento. |
participantsPerIp | Quantos personagens do mesmo IP podem entrar. 0 é sem limite — suba para 1 ou 2 se quiser cortar quem entra com várias janelas para ganhar sozinho. |
registrationTime | Minutos de inscrição aberta antes de começar. |
timeBetweenEvents | Intervalo mínimo, em minutos, entre um evento e o próximo. |
Fake Players
<fakePlayers count="5" enabled="false" maxPerTeam="25"
minRealPlayers="2" onlyWhenNotFull="true" spawnDelaySeconds="0"/>
Preenchem o evento quando falta gente. minRealPlayers é a trava que importa: com 2, o evento só roda se houver pelo menos dois jogadores de verdade — os simulados completam, mas não fazem o evento sozinhos. onlyWhenNotFull="true" faz eles saírem de cena assim que jogadores reais chegam.
Vem desligado por padrão. É uma ferramenta de servidor novo, para os primeiros meses.
Troca de pontos
<pointExchange day="7" hour="14" itemId="57" rate="1"/>
Os pontos ganhos nos eventos viram item pelo comando .eventexchange. day vai de 1 (segunda) a 7 (domingo), hour de 0 a 23, rate é quantos itens saem por ponto. No exemplo, domingo às 14h o jogador troca ponto por adena, um para um.
Concentrar a troca num dia e horário cria um evento social por si só — todo mundo aparece no mesmo momento.
Um evento
<event enabled="false" id="2" type="TEAM_VS_TEAM"
minPlayers="2" runningTime="5" winPoints="15">
<schedule times="11:00,17:00,23:00"/>
<teams>
<team name="Gryffindor"><loc x="148387" y="46572" z="-3408"/></team>
<team name="Slytherin"><loc x="150567" y="46597" z="-3408"/></team>
</teams>
<rewards>
<onKill chance="5" itemId="57" max="2" min="1"/>
<winner><reward count="2" itemId="57"/></winner>
<draw><reward count="1" itemId="57"/></draw>
<top1><reward count="3" itemId="57"/></top1>
</rewards>
</event>
| Atributo | O que faz |
|---|---|
enabled | Liga só este evento. Os oito vêm desligados de fábrica. |
id | Identificador fixo do modo. Não mude. |
type | O modo: DEATHMATCH, TEAM_VS_TEAM, CAPTURE_THE_FLAG, BATTLE_ROYALE, HUNTING_GROUNDS, PARTY, SPOIL, FIGHT_BOSS. |
minPlayers | Mínimo de inscritos para o evento acontecer. Abaixo disso ele cancela. |
runningTime | Duração em minutos. |
winPoints | Pontos dados ao vencedor, gastos depois no .eventexchange. |
Agenda
<schedule times="11:00,17:00,23:00"/>
Horários separados por vírgula, formato 24h. Espalhe pelos três turnos: um evento de manhã, um à tarde e um à noite cobre fusos diferentes e dá ritmo ao dia.
Mapa
Muda conforme o modo:
respawnSpotscom váriosloc— usado no Deathmatch: o jogador renasce num ponto sorteado da lista.teamscom umloccada — usado no TvT e no CTF: define onde cada time nasce.doors— portas que o evento abre ou fecha durante a partida. Pode ficar vazio.
As coordenadas são x, y e z do mundo. Pegue com //loc dentro do jogo, no lugar exato onde quer o spawn.
Recompensas
| Tag | Quando paga |
|---|---|
onKill | A cada abate. chance é a probabilidade percentual, min e max a faixa de quantidade. |
winner | Para o time ou jogador vencedor. |
draw | Em caso de empate. |
top1, top2, top3 | Para os melhores colocados individualmente. |
winnerTop | Para o topo do time vencedor. |
Combinar onKill de chance baixa com prêmio de vitória alto funciona melhor do que o contrário: mantém o evento disputado até o fim, em vez de virar uma corrida por abates isolados.
Ligando o primeiro evento
Pelo painel, dentro do jogo:
- Abra a aba de eventos na Community Board.
- Clique em
Editno modo escolhido e ajuste horário, mapa e recompensa. - Confira o mínimo de jogadores — um valor alto demais faz o evento nunca acontecer.
- Clique em
Enablepara ligar. - Use
Startpara testar na hora, sem esperar a agenda.
Se preferir editar o arquivo à mão, é o mesmo conjunto de campos: enabled, schedule times, minPlayers, as coordenadas do mapa (pegue com //loc) e o bloco de recompensas. Depois, Reload no painel ou recarregar os dados.
Comece com um evento ligado e observe uma semana. Oito eventos ativos num servidor pequeno competem entre si e nenhum enche.
Cuidados
participantsPerIp="0"é sem limite. Num servidor com premiação boa, isso convida a múltiplas janelas.minPlayersé a diferença entre evento e frustração. Melhor cancelar por falta de gente do que rodar um TvT de 2 contra 1.- Coordenada errada teleporta para dentro da textura. Teste o spawn antes de abrir para o público.
increasePvp="true"mistura evento e ranking. Se você tem ranking de PvP com premiação, avalie deixar emfalsepara o evento não virar o caminho fácil.
Como isso conversa com o resto da base
Os comandos .register, .leave e .eventexchange são a interface do jogador com este motor — estão documentados na aba de comandos do catálogo. Os Fake Players compartilham configuração com fakesettings.xml, e a premiação usa os mesmos itens do sistema de recompensas em reward/.