All systems Combat, events and world

Motor de eventos

Oito modos de evento — Deathmatch, Team vs Team, Capture The Flag, Battle Royale, Hunting Grounds, Party, Spoil e Fight Boss — que se agendam sozinhos, montam os times, teleportam, contam pontos e pagam as recompensas. Tudo editável de dentro do jogo, pela Community Board, com backup datado a cada alteração.

This document has not been translated yet — showing the Portuguese version.

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çãoO que faz
EditAbre o evento para editar horário, recompensa, mapa e regras.
EnableLiga ou desliga o evento, o mesmo que o enabled do XML.
StartDispara o evento agora, fora da agenda.
Reward shopAbre a loja de troca de pontos, sem precisar do .eventexchange.
ReloadRecarrega a configuração.
Engine settingsAs regras globais do motor — nível, inscritos, limite por IP, intervalo.
ActiveMostra 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.xml com backup datado e valem a partir da próxima ocorrência; um evento em andamento nunca é interrompido.

  1. 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.
  2. 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.
  3. 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">
AtributoO que faz
enabledLiga ou desliga o motor inteiro.
fixedScheduleCom true, os eventos rodam exatamente nos horários listados. Com false, o motor tem liberdade para encaixar respeitando timeBetweenEvents.
increasePvpSe as mortes dentro do evento contam para o contador de PvP do personagem.
minLevel / maxLevelFaixa de nível aceita. Vale para todos os eventos.
maxParticipantsTeto de inscritos por evento.
participantsPerIpQuantos 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.
registrationTimeMinutos de inscrição aberta antes de começar.
timeBetweenEventsIntervalo 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>
AtributoO que faz
enabledLiga só este evento. Os oito vêm desligados de fábrica.
idIdentificador fixo do modo. Não mude.
typeO modo: DEATHMATCH, TEAM_VS_TEAM, CAPTURE_THE_FLAG, BATTLE_ROYALE, HUNTING_GROUNDS, PARTY, SPOIL, FIGHT_BOSS.
minPlayersMínimo de inscritos para o evento acontecer. Abaixo disso ele cancela.
runningTimeDuração em minutos.
winPointsPontos 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:

  • respawnSpots com vários loc — usado no Deathmatch: o jogador renasce num ponto sorteado da lista.
  • teams com um loc cada — 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

TagQuando paga
onKillA cada abate. chance é a probabilidade percentual, min e max a faixa de quantidade.
winnerPara o time ou jogador vencedor.
drawEm caso de empate.
top1, top2, top3Para os melhores colocados individualmente.
winnerTopPara 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:

  1. Abra a aba de eventos na Community Board.
  2. Clique em Edit no modo escolhido e ajuste horário, mapa e recompensa.
  3. Confira o mínimo de jogadores — um valor alto demais faz o evento nunca acontecer.
  4. Clique em Enable para ligar.
  5. Use Start para 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 em false para 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/.

Talk on WhatsAppContact here