Skip to content

Latest commit

 

History

History
145 lines (131 loc) · 7.6 KB

README.md

File metadata and controls

145 lines (131 loc) · 7.6 KB

Plugin Greenieboard

This plugin allows you to have a (optional: persistent) greenieboard for the top x (default: 10) players and to give players the opportunity to analyse their carrier landings.

Note

The landing quality marks will only be generated for landings* on the DCS Super Carrier module unless you use MOOSE AIRBOSS (see below).
missionstats have to be enabled for your server.**

*Not all landings generate a mark for whatever reason and some are off from what you might have experienced in game.

Moose AIRBOSS Integration (Optional)

You can integrate your LSO comments and trapsheets generated by Moose AIRBOSS into DCSServerBot.
To do so, follow the configuration example below. DCSServerBot will detect your landings and generate the needed information for players, so that you can check out your landings with the /traps info command.
The included trapsheet-graphs are taken from HypeMan, so credits go to Rob <3!

I can't do a full Moose AIRBOSS documentation here, you guys want to look at this link instead. To use the full capabilities of DCSServerBot, I would expect that you save Trapsheet data in addition to the normal LSO comments. Both are being stored in CSV files, usually somewhere below your Saved Games<instance>\ folder. You need to configure this folder and the format of your files in the greenieboard.json, see the example below. I would recommend to use separate files per carrier.

Note

Moose.AIRBOSS stores a CSV file for every trap in the "basedir" you configured for your servers. You can add the directory to your Cleanup-service to get rid of these files after a while.

Code Changes

To integrate DCSServerBot into your lua code using Moose AIRBOSS, you need to send the following structure to the bot after the trapsheet is written to disk:

local airboss=AIRBOSS:New("CVN-73", "CVN-73")

function airboss:OnAfterLSOGrade(from, event, to, playerData, myGrade)
    player_name = playerData.name:gsub('[%p]', '')
    [...] -- do some magic in here, like SH break, etc.
    trapsheet = "AIRBOSS-trapsheet-" .. player_name
    airbossWashington:SetTrapSheet(nil, trapsheet)
    [...]
    self:_SaveTrapSheet(playerData, myGrade)

    msg = {}
    msg.command = "onMissionEvent"
    msg.eventName = "S_EVENT_AIRBOSS"
    msg.initiator = {}
    msg.initiator.name = playerData.name
    msg.place = {}
    msg.place.name = myGrade.carriername
    msg.points = myGrade.points
    msg.grade = myGrade.grade
    msg.details = myGrade.details
    msg.case = myGrade.case
    msg.wire = playerData.wire
    msg.trapsheet = trapsheet
    msg.time = timer.getTime()
    dcsbot.sendBotTable(msg)
end 

A sample file is included in plugins/greenieboard/sample/airboss.lua

FunkMan Integration (Optional)

The developers of Moose were so kind to align their new way of sending trap data from DCS via UDP with me, so we could generate events, that are compatible with DCSServerBot! To use this option, you currently need to download and link FunkMan, but you don't need to run it. I just use some rendering stuff from there for convenience reasons and just because they are nice and funkyfranky put a lot of effort in already. A true community collaboration though!
For enabling the FunkMan functionality, you need to enable that in your Moose lua code (samples yet to come, see Moose documentation for now) and you need to link the place where you downloaded FunkMan to your greenieboard.json (see below).

Configuration

As GreenieBoard is an optional plugin, you need to activate it in main.yaml first like so:

opt_plugins:
  - greenieboard

The plugin comes as many other plugins with a yaml configuration. If you don't generate your own config, DCSServerBot will just copy over the sample by itself and use that one. This will do it for the most users, if you don't plan to use the persistent mode.

Anyway, this is how the configuration will look like. For now, there is only a default config, so you can't generate different greenieboards for different servers. If that is a user demand in the future, I might add it.

DEFAULT:
  num_landings: 5           # display the last 5 landings
  num_rows: 10              # display 10 players
  persistent_board: false   # if true, a persistent board will be uploaded into persistent_channel
  persistent_channel: 123456789 # in which channel to post the board
  squadrons:
    - name: 'My Fancy Squadron 1' # Optional: display boards for these squadrons
    - name: 'My Fancy Squadron 2'
  ratings:                  # Default points per LSO rating, amend them to your needs
    _OK_: 5
    OK: 4
    (OK): 3
    B: 2.5
    --: 2
    OWO: 2
    WO: 1
    C: 0
  credits: true             # People should get credits for their landings (see CreditSystem)
  Moose.AIRBOSS:
    basedir: airboss        # Trapsheets will be stored in Saved Games\<instance>\airboss
  FunkMan:                  # if you want to use the FunkMan integration
    IMAGEPATH: ../FunkMan/funkpics/
    install: ../FunkMan
DCS.release_server:         # our server uses Moose.AIRBOSS
  num_rows: 5               # Overwrite the number of rows to display (default: 10)
  Moose.AIRBOSS:
    basedir: airboss        # overwrite the default in here, if you like
    grades: AIRBOSS-{carrier}_LSOGrades.csv
    trapsheets: '*AIRBOSS-{carrier}_Trapsheet-{name}_{unit_type}*.csv'
  persistent_board: true    # if true, a persistent board will be uploaded into persistent_channel
  persistent_channel: 123456789 # Optional: in which channel to post the board (default: status channel)
  squadrons: 
    - name: 'My Fancy Squadron 1' # Optional: display boards for these squadrons
      channel: 1234567890         # Optional: channel ID (default, persistent_channel above)
    - name: 'My Fancy Squadron 2'
      channel: 9876543210

You can use the DCS standard way (Super Carrier), Moose.AIRBOSS and FunkMan side by side. You just need to decide on one of these methods per server. You only get graphical trapsheets with Moose.AIRBOSS and FunkMan, the greenieboard works with all 3 methods.

Discord Commands

Command Parameter Channel Role Description
/traps board rows all DCS Print the current greenieboard (per server). 10 rows is default, can be changed with the parameter.
/traps info [user] all DCS Display the last carrier landings for this user and a detailed view on selection. User is the caller if not provided.
/traps add user all DCS Admin Adds a trap for this user (manual data input).

Highscore Plugin

You can add your traps to your .highscore (.hs) command. To do that, copy the file plugins/userstats/reports/highscore.json to /reports/userstats and add or replace the following snippet (change col and row to your position in the chart):

            {
              "class": "plugins.greenieboard.reports.HighscoreTraps",
              "params": { "col": 1, "row": 4, "include_bolters": true, "include_waveoffs": true }
            }

include_bolters = true will include bolters to the count of traps
include_waveoffs = true will include wave-offs to the count of traps