KingOfTheHill
Descrição
O KingOfTheHill cria eventos de captura. O servidor escolhe um local configurado, cria um mastro e criaturas e entrega saque ao jogador que completa a captura.
Os jogadores participam entrando na área do evento a pé e permanecendo dentro do raio menor de captura. O HUD aparece automaticamente e mostra o progresso individual e a quantidade de jogadores na área do evento. Cada jogador acumula seu próprio progresso; outros jogadores na área não interrompem a captura. Sair da área ou entrar em um veículo pausa o progresso sem zerá-lo. Uma nova localização de evento reinicia o progresso.
Configuração
Configuração padrão
KingOfTheHill.json
{
"m_Enable": 0,
"m_Logging": 1,
"m_ShowOnMap": 1,
"m_TimeStartMin": 300,
"m_TimeStartMax": 600,
"m_CaptureTime": 1600,
"m_EventTimeout": 1600,
"m_TimeInterval": 600,
"m_MinPlayerCount": 10,
"m_Locations": [
{
"m_Position": {
"m_N": "Nort-West Airfield",
"m_X": 4497.51,
"m_Y": 10351.19
},
"m_EventRadius": 100,
"m_CaptureRadius": 20,
"m_RewardPools": [
"supplies",
"weapons"
],
"m_Infecteds": [
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Red",
"ZmbM_CitizenASkinny_Red",
"ZmbM_CitizenASkinny_Red",
"Animal_UrsusArctos",
"Animal_CanisLupus_White",
"Animal_CanisLupus_White",
"Animal_CanisLupus_Grey",
"Animal_CanisLupus_Grey",
"Animal_CanisLupus_Grey"
]
},
{
"m_Position": {
"m_N": "Tisy Military",
"m_X": 1564.15,
"m_Y": 14064.82
},
"m_EventRadius": 100,
"m_CaptureRadius": 10,
"m_RewardPools": [
"weapons"
],
"m_Infecteds": [
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Red",
"ZmbM_CitizenASkinny_Red",
"ZmbM_CitizenASkinny_Red",
"Animal_UrsusArctos",
"Animal_CanisLupus_White",
"Animal_CanisLupus_White",
"Animal_CanisLupus_Grey",
"Animal_CanisLupus_Grey",
"Animal_CanisLupus_Grey"
]
},
{
"m_Position": {
"m_N": "Krasno Airfield",
"m_X": 12166.42,
"m_Y": 12644.65
},
"m_EventRadius": 150,
"m_CaptureRadius": 30,
"m_RewardPools": [
"weapons"
],
"m_Infecteds": [
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Red",
"ZmbM_CitizenASkinny_Red",
"ZmbM_CitizenASkinny_Red",
"Animal_UrsusArctos",
"Animal_CanisLupus_White",
"Animal_CanisLupus_White",
"Animal_CanisLupus_Grey",
"Animal_CanisLupus_Grey",
"Animal_CanisLupus_Grey"
]
},
{
"m_Position": {
"m_N": "Chernogorsk",
"m_X": 7196.87,
"m_Y": 3548.71
},
"m_EventRadius": 150,
"m_CaptureRadius": 30,
"m_RewardPools": [
"supplies"
],
"m_Infecteds": [
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Blue",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Brown",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Grey",
"ZmbM_CitizenASkinny_Red",
"ZmbM_CitizenASkinny_Red",
"ZmbM_CitizenASkinny_Red",
"Animal_UrsusArctos",
"Animal_CanisLupus_White",
"Animal_CanisLupus_White",
"Animal_CanisLupus_Grey",
"Animal_CanisLupus_Grey",
"Animal_CanisLupus_Grey"
]
}
],
"m_RewardPools": [
{
"m_Name": "supplies",
"m_Container": "AC_KingOfTheHill_SeaChest",
"m_QuantityMax": 20,
"m_Items": [
{
"m_Class": "Apple",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 2,
"m_Attachments": []
},
{
"m_Class": "BandageDressing",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 2,
"m_Attachments": []
},
{
"m_Class": "WaterBottle",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 3,
"m_Attachments": []
},
{
"m_Class": "VitaminBottle",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 3,
"m_Attachments": []
},
{
"m_Class": "Tomato",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 2,
"m_Attachments": []
},
{
"m_Class": "PainkillerTablets",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 2,
"m_Attachments": []
},
{
"m_Class": "FirstAidKit",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 2,
"m_Attachments": []
},
{
"m_Class": "Rice",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 3,
"m_Attachments": []
},
{
"m_Class": "CharcoalTablets",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 2,
"m_Attachments": []
},
{
"m_Class": "SpaghettiCan",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 2,
"m_Attachments": []
},
{
"m_Class": "Canteen",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 4,
"m_Attachments": []
},
{
"m_Class": "TetracyclineAntibiotics",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 2,
"m_Attachments": []
},
{
"m_Class": "BakedBeansCan",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 2,
"m_Attachments": []
},
{
"m_Class": "Heatpack",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 2,
"m_Attachments": []
},
{
"m_Class": "TacticalBaconCan",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 1,
"m_Attachments": []
}
]
},
{
"m_Name": "weapons",
"m_Container": "AC_KingOfTheHill_SeaChest",
"m_QuantityMax": 20,
"m_Items": [
{
"m_Class": "Battery9V",
"m_Chance": 90,
"m_StackMin": 75,
"m_StackMax": 100,
"m_QuantityMax": 1,
"m_Attachments": []
},
{
"m_Class": "M68Optic",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 1,
"m_Attachments": []
},
{
"m_Class": "M68Optic",
"m_Chance": 25,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 1,
"m_Attachments": [
"Battery9V"
]
},
{
"m_Class": "Mag_STANAG_30Rnd",
"m_Chance": 75,
"m_StackMin": 50,
"m_StackMax": 100,
"m_QuantityMax": 3,
"m_Attachments": []
},
{
"m_Class": "Mag_AKM_30Rnd",
"m_Chance": 75,
"m_StackMin": 50,
"m_StackMax": 100,
"m_QuantityMax": 3,
"m_Attachments": []
},
{
"m_Class": "Mag_FAL_20Rnd",
"m_Chance": 75,
"m_StackMin": 50,
"m_StackMax": 100,
"m_QuantityMax": 3,
"m_Attachments": []
},
{
"m_Class": "M4_RISHndgrd",
"m_Chance": 75,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 5,
"m_Attachments": []
},
{
"m_Class": "AK_WoodHndgrd",
"m_Chance": 75,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 5,
"m_Attachments": []
},
{
"m_Class": "M4_OEBttstck",
"m_Chance": 75,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 5,
"m_Attachments": []
},
{
"m_Class": "AK_WoodBttstck",
"m_Chance": 75,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 5,
"m_Attachments": []
},
{
"m_Class": "Fal_FoldingBttstck",
"m_Chance": 75,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 5,
"m_Attachments": []
},
{
"m_Class": "M4_Suppressor",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 5,
"m_Attachments": []
},
{
"m_Class": "AK_Suppressor",
"m_Chance": 50,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 5,
"m_Attachments": []
},
{
"m_Class": "M4A1",
"m_Chance": 40,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 1,
"m_Attachments": []
},
{
"m_Class": "AKM",
"m_Chance": 30,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 1,
"m_Attachments": []
},
{
"m_Class": "FAL",
"m_Chance": 20,
"m_StackMin": 0,
"m_StackMax": 100,
"m_QuantityMax": 1,
"m_Attachments": []
}
]
}
],
"m_Messages": {
"m_Before": "New event will start in %TimeMinutes% minutes.",
"m_After": "Event has been started at %LocationName%.",
"m_Count": "Event not started due to lack of players.",
"m_Claimed": "The event is at more than %PercentProgress%% of progress.",
"m_Winner": "Player %PlayerName% completed the %LocationName% event.",
"m_Failed": "Event ended with no player victorious."
},
"m_NotificationTime": 10,
"m_NotificationInterval": 300,
"m_NotificationClaimedInChat": 0,
"m_Webhook": ""
}Opções
Os tempos são expressos em segundos e os raios em metros. Revise as coordenadas de Chernarus para o mapa do servidor. Use valores positivos de captura, timeout e intervalo, limite máximo de início maior que o mínimo e listas de locais e recompensas não vazias.
| Opção | Tipo | Descrição |
|---|---|---|
m_Enable | bool | Com 1, habilita eventos, HUD e comandos do módulo. Com 0, desabilita esses recursos. |
m_Logging | bool | Com 1, registra o início dos eventos e as reivindicações de recompensa nos logs. Com 0, desativa esses registros do módulo. |
m_ShowOnMap | bool | Com 1, publica a área do evento em Events no AC Map. Com 0, não publica. O marcador é removido quando o evento ativo termina. |
m_TimeStartMin | int | Limite mínimo inclusivo do atraso aleatório entre o anúncio prévio e a verificação automática de população. |
m_TimeStartMax | int | Limite máximo exclusivo desse atraso aleatório. |
m_CaptureTime | int | Tempo base para completar o progresso individual permanecendo dentro do raio de captura. Deve ser positivo para o progresso aumentar. |
m_EventTimeout | int | Tempo sem atualizações de presença de jogadores na área do evento. Essas atualizações renovam o temporizador; não é uma duração máxima fixa do evento. |
m_TimeInterval | int | Espera antes de agendar o primeiro anúncio automático e antes do ciclo seguinte após conclusão, falha ou falta de jogadores. O atraso aleatório de início ocorre depois dessa espera. |
m_MinPlayerCount | int | Número mínimo de jogadores conectados verificado após o atraso automático de início. Se atendido, o evento é inicializado cerca de 2 segundos depois; caso contrário, outro ciclo é agendado. A ação manual set ignora essa verificação. |
m_Locations | array<object> | Locais disponíveis para os eventos. Um é escolhido aleatoriamente ao inicializar um evento. |
m_RewardPools | array<object> | Grupos de recompensas definidos na configuração deste módulo, com seus contêineres e listas de itens. |
m_Messages | object | Modelos de anúncios públicos, detalhados abaixo. |
m_NotificationTime | int | Duração de exibição das notificações na tela. A exibição depende do módulo Notification. |
m_NotificationInterval | int | Intervalo entre anúncios de progresso após detectar presença na área do evento. Com 0, desativa esses anúncios periódicos. |
m_NotificationClaimedInChat | bool | Com 1, envia os anúncios de progresso pelo Chat; com 0, exibe como notificações. Os demais anúncios continuam como notificações. |
m_Webhook | string | URL do webhook Discord para os anúncios públicos não vazios. Deixe vazia para desativar o envio externo. |
O AC Map é usado quando m_ShowOnMap=1, e o Chat é usado para comandos administrativos e anúncios de progresso configurados para chat. Configure o webhook somente quando precisar do envio externo.
m_Locations[]
| Opção | Tipo | Descrição |
|---|---|---|
m_Position | object | Nome e coordenadas horizontais do centro do evento. |
m_EventRadius | int | Raio usado para o HUD, a contagem de jogadores, as atualizações de presença e a criação de criaturas. |
m_CaptureRadius | int | Raio ao redor do centro em que o progresso individual de captura aumenta. Mantenha-o dentro do raio do evento. |
m_RewardPools | array<string> | Nomes dos grupos de recompensas deste módulo. Um nome é sorteado; se a lista estiver vazia ou esse nome não for encontrado, o módulo sorteia entre todos os grupos configurados. |
m_Infecteds | array<string> | Classes de criaturas criadas para o evento, incluindo infectados ou animais. Cada entrada cria uma criatura em posição aleatória dentro do raio do evento; nomes repetidos criam criaturas adicionais. |
O centro do local determina a posição do mastro no terreno. A presença dentro do raio maior do evento pode mantê-lo ativo mesmo sem jogador capturando. O anúncio de progresso usa o maior percentual individual informado ao servidor durante o evento.
m_Locations[].m_Position
| Opção | Tipo | Descrição |
|---|---|---|
m_N | string | Nome do local usado nos anúncios do evento. |
m_X | float | Coordenada horizontal X. |
m_Y | float | Segunda coordenada horizontal, correspondente ao eixo Z do DayZ. A altura é obtida do terreno. |
m_RewardPools[]
| Opção | Tipo | Descrição |
|---|---|---|
m_Name | string | Identificador do grupo referenciado em m_Locations[].m_RewardPools. Use nomes únicos. |
m_Container | string | Classe do item criado para conter a recompensa. A configuração distribuída usa AC_KingOfTheHill_SeaChest, com inventário de 10 × 100. |
m_QuantityMax | int | Limite total positivo de seleções de itens em uma recompensa. Uma entrada sorteada consome cota mesmo se a criação do item falhar. |
m_Items | array<object> | Itens, chances, limites individuais, conteúdo das pilhas e acessórios desse grupo. |
As recompensas são definidas aqui, em vez de usar nomes do catálogo separado do Rewards. O contêiner é criado próximo ao centro do local, e o jogador deve recolher seu conteúdo. O início do próximo evento automático exclui o contêiner anterior rastreado e seu conteúdo restante. A recarga do módulo também exclui o mastro e o contêiner atualmente rastreados.
m_RewardPools[].m_Items[]
| Opção | Tipo | Descrição |
|---|---|---|
m_Class | string | Classe existente de item, arma, munição ou carregador a criar. |
m_Chance | int | Chance percentual por tentativa, de 0 a 100. |
m_StackMin | int | Conteúdo mínimo em percentual da quantidade máxima do item. Use de 0 a 100, sem exceder m_StackMax. |
m_StackMax | int | Percentual máximo de conteúdo, entre m_StackMin e 100. Aplica-se à munição ou quantidade do item, não à vida do item. |
m_QuantityMax | int | Número máximo de seleções dessa entrada por recompensa; 0 a exclui do sorteio. |
m_Attachments | array<string> | Classes de acessórios a criar no item sorteado, conforme os espaços compatíveis. Use [] para nenhum. |
O gerador usa uma cópia da lista de itens, então as cotas são renovadas a cada recompensa. As entradas são tentadas na ordem da lista em múltiplas passagens; chances baixas e falhas de criação podem gerar menos itens que o limite total. Itens cuja quantidade máxima é um não recebem ajuste de pilha.
m_Messages
Um modelo vazio suprime o anúncio correspondente e seu envio pelo webhook.
| Opção | Tipo | Descrição |
|---|---|---|
m_Before | string | Anúncio da espera aleatória antes da verificação automática de população. |
m_After | string | Evento inicializado no local escolhido. |
m_Count | string | Início automático recusado por quantidade insuficiente de jogadores conectados. |
m_Claimed | string | Anúncio periódico de progresso controlado por m_NotificationInterval. |
m_Winner | string | Jogador que concluiu o evento. |
m_Failed | string | Evento encerrado após o timeout de atualizações de presença. |
| Placeholder | Valor |
|---|---|
%LocationName% | Nome do local enquanto há uma localização ativa, como nos anúncios de início, progresso e vencedor. |
%PlayerName% | Nome do vencedor em m_Winner. |
%TimeMinutes% | Espera expressa em minutos em m_Before. |
%PercentProgress% | Maior percentual individual informado em m_Claimed; preserve o % seguinte no modelo para exibir o símbolo de porcentagem. |
Classes de configuração
O evento cria os objetos abaixo automaticamente. Eles não são campos selecionáveis no JSON e não devem ser incluídos no spawn comum de saque.
| Classe | Finalidade |
|---|---|
AC_KingOfTheHill_Pole | Mastro do evento e indicador de fumaça. |
AC_KingOfTheHill_Flag | Bandeira criada automaticamente no mastro do evento. |
Tipos
O baú de recompensa é criado pelo evento. Fora desse fluxo, um baú não associado à missão é excluído automaticamente após cerca de 10 segundos; uma entrada na economia sozinha não o torna persistente.
types.xml
<type name="AC_KingOfTheHill_SeaChest">
<lifetime>3888000</lifetime>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0" />
</type>Comandos
O módulo registra /kingofthehill, /king e /koth quando habilitado. Os três aceitam as mesmas ações. O Chat consulta a permissão do alias utilizado: command.kingofthehill, command.king ou command.koth; root concede os três acessos.
/kingofthehill start
Encerra um evento ativo e agenda outro ciclo após m_TimeInterval, seguido do atraso aleatório de início e da verificação de população. Se não houver evento ativo, essa ação não cria um novo agendamento nem reinicia um evento interrompido antes com stop; use set para um evento imediato ou recarregue o módulo.
- Sintaxe:
/kingofthehill start - Argumentos: ação
startobrigatória. - Permissão:
command.kingofthehillouroot. Com/king startou/koth start, use a permissão do alias correspondente. - Exemplo:
/kingofthehill start
/kingofthehill set
Cancela as chamadas automáticas pendentes e inicializa um evento imediatamente em um local configurado aleatório, ignorando o mínimo de jogadores e o atraso de início. O nome opcional mostrado na mensagem de erro do comando não é utilizado pela implementação; ele não seleciona um local.
- Sintaxe:
/kingofthehill set - Argumentos: ação
setobrigatória; não há argumento de local implementado para seleção. - Permissão:
command.kingofthehillouroot. Com/king setou/koth set, use a permissão do alias correspondente. - Exemplo:
/kingofthehill set
Essa ação não exclui os mastros ou contêineres de recompensa anteriores antes de criar o novo evento. Evite o uso repetido enquanto ainda houver objetos de um evento anterior.
/kingofthehill stop
Interrompe a captura ativa e cancela as chamadas automáticas pendentes. O marcador do evento é removido e a fumaça do mastro atual é interrompida. Essa ação mantém o mastro, o contêiner de recompensa e as criaturas no mundo; ela não agenda o próximo evento.
- Sintaxe:
/kingofthehill stop - Argumentos: ação
stopobrigatória. - Permissão:
command.kingofthehillouroot. Com/king stopou/koth stop, use a permissão do alias correspondente. - Exemplo:
/kingofthehill stop
/reload kingofthehill
Recarrega a configuração pelo módulo Commands, remove o mastro e o contêiner de recompensa atualmente rastreados com seu conteúdo restante e reinicia o ciclo de eventos. As criaturas criadas anteriormente não são removidas por essa rotina de recarga.
- Sintaxe:
/reload kingofthehill - Argumentos:
kingofthehillidentifica o módulo a recarregar. - Permissão:
command.reloadouroot. - Exemplo:
/reload kingofthehill
Permissões
Configure os grupos administrativos conforme Permissões. Cada alias tem sua própria permissão de chat, e cada uma dessas permissões libera as três ações para aquele alias.
| Permissão | Ação |
|---|---|
command.kingofthehill | Usar start, set e stop por /kingofthehill. |
command.king | Usar as mesmas ações por /king. |
command.koth | Usar as mesmas ações por /koth. |
command.reload | Recarregar o módulo por /reload kingofthehill. |
root | Satisfazer todas as consultas de permissão acima. |
