Jump to content

Recommended Posts

Posted (edited)
Units killed is tricky.

 

About the only thing you can do if multiple entities hit a unit is give the kill to the last entity to hit it before the kill.

 

 

In the log parser our group uses, we pull all units killed and then pull each entity that hit it. When you compare time stamps you get the last one to hit it.

I thought about more complex methods, but in the end, I just decided to solve it this way- last person to hit a unit before it dies, gets credit for the kill. 99% of the time, this will be correct, and even if in the rare cases it's not correct, it will average out over time.

 

 

Then there's the "Building" problem.

 

 

It is a pain.

I solve this by keeping a record of the runtime ID of human-shot weapons in the main simulation environment. If a target is hit by a human-shot weapon, then I know which human shot the weapon :) I call this code up only when the initiator of the hit event is not identified.

 

This method is not perfect however- there is a bug in DCS where the runtime IDs of weapons in hit events are incorrect for multiplayer clients; however it only affects, to my knowledge, guns and CBU submunitions. So if you like, drop a CBU-97, and get blown to tiny pieces sometime after the bomb is dropped but before the munitions attack the targets, you might not get credit for any hits or kills.

 

Additionally, this bug forces me to assume, for multiplayer client hits where the weapon was guns or CBUs (and hence, the weapon is not identified), that the weapon that did the hitting was the last weapon fired by the client. This will be correct at least 95% of the time though.

 

 

Players coming and going, disco's etc. just muddles it up even more.

 

Disconnect problem solved by continuously monitoring the existence of all humans that have been hit by a weapon. If a hit human suddenly stops existing without a dead event preceding their non-existence, then a crash is put on their record, and if applicable, a kill is awarded to the human who hit that client last. Additionally, to make sure that the "dead" event is not just simply delayed somehow, for the next 10 seconds, deaths are not counted on that unitName.

 

As the kill/loss records are kept on the server and are indexed by UCID, you can be awarded kills even if you are no longer on the server- so if you damaged someone or something, left, and then that someone or something died at a later time without being hit by something else, you are awarded the kill.

 

All this logic has been tested and as far as I can tell, is working correctly. I just need to make the interface, and decide how much more in-detail I want the stats to be. In the current version, kills are just tracked by these categories:

 

vehicle

ship

static

helicopter

plane

 

(the PvP system is a separate thing).

 

I am considering importing the unit attributes list from the main simulation Lua environment so that I can have more detailed categories, like:

 

--------------------------

Ground Vehicles:

SAMs

AAA

Radar

Artillery/MLRS

Armored Vehicles

Unarmored Vehicles

Other??

 

Planes:

Fighter Aircraft

Attack Aircraft

Unarmed Aircraft

Other??

 

Helicopters:

Attack Helicopters

Scout Helicopters

Utility Helicopters

Other??

 

Ships:

Armed Ships

Unarmed Ships

Other??

 

Buildings:

Static objects

Map objects??

---------------------

 

If so, I haven't yet decided what exactly the categories will be, I would need to review the categories ED uses and make sure I have all-inclusive categories. I might be a good idea to just go ahead and decide to call it a "wrap" for now so that I can get the current code extensively tested on a few public servers. On the public servers, I imagine most people interested in stats will be more interested in the PvP stats anyway.

Edited by Speed

Intelligent discourse can only begin with the honest admission of your own fallibility.

Member of the Virtual Tactical Air Group: http://vtacticalairgroup.com/

Lua scripts and mods:

MIssion Scripting Tools (Mist): http://forums.eagle.ru/showthread.php?t=98616

Slmod version 7.0 for DCS: World: http://forums.eagle.ru/showthread.php?t=80979

Now includes remote server administration tools for kicking, banning, loading missions, etc.

Posted

It's incredible you can do all that.

 

I need to learn LUA.

 

It won't be just the open servers and PVP'ers using it. A lot of coop squads will too!

Posted (edited)

Rather than simply "plane", "helicopter", "vehicle", "static", and "ship", I'm now using the following unit categories for stats tracking. With a few exceptions (like having to manaully move UH-1H and SH-60B from "Attack" to "Utility":huh:), the table below is automatically generated based on unit attributes.

slmod.unitCategories = 
{
   ["Buildings"] = 
   {
       ["Static Objects"] = 
       {
           ["Subsidiary structure G"] = true,
           ["FARP CP Blindage"] = true,
           ["Subsidiary structure C"] = true,
           ["Barracks 2"] = true,
           ["Small house 2C"] = true,
           ["Military staff"] = true,
           ["Oil platform"] = true,
           ["Tech hangar A"] = true,
           ["Oil derrick"] = true,
           ["Tech combine"] = true,
           ["Coach a passenger"] = true,
           ["Airshow_Crowd"] = true,
           ["Hangar A"] = true,
           ["Repair workshop"] = true,
           ["Subsidiary structure 2"] = true,
           ["FARP Ammo Dump Coating"] = true,
           ["Small house 1C area"] = true,
           ["Subsidiary structure 3"] = true,
           ["Boiler-house A"] = true,
           ["Workshop A"] = true,
           ["Small werehouse 1"] = true,
           ["Garage small B"] = true,
           ["Small werehouse 4"] = true,
           ["Shop"] = true,
           ["Subsidiary structure B"] = true,
           ["FARP Fuel Depot"] = true,
           ["Coach cargo"] = true,
           ["Electric power box"] = true,
           ["Small house 1A"] = true,
           ["Container red 3"] = true,
           ["Garage A"] = true,
           ["Hangar B"] = true,
           ["Cafe"] = true,
           ["Restaurant 1"] = true,
           ["Subsidiary structure A"] = true,
           ["Container white"] = true,
           ["Warehouse"] = true,
           ["Shelter"] = true,
           ["Railway crossing B"] = true,
           ["Subsidiary structure F"] = true,
           ["Farm A"] = true,
           ["Fuel tank"] = true,
           [".Command Center"] = true,
           ["Coach a tank"] = true,
           ["Container brown"] = true,
           ["Supermarket A"] = true,
           ["Coach a platform"] = true,
           ["Garage small A"] = true,
           ["TV tower"] = true,
           ["Farm B"] = true,
           ["Subsidiary structure 1"] = true,
           ["Container red 2"] = true,
           ["Transport"] = true,
           ["Electric locomotive"] = true,
           ["Container red 1"] = true,
           ["Bridge"] = true,
           [".Ammunition depot"] = true,
           ["Small werehouse 2"] = true,
           ["Small house 1A area"] = true,
           ["FARP Tent"] = true,
           ["Water tower A"] = true,
           ["Locomotive"] = true,
           ["Shelter B"] = true,
           ["Pump station"] = true,
           ["Comms tower M"] = true,
           ["Coach cargo open"] = true,
           ["Tank"] = true,
           ["Landmine"] = true,
           ["Building"] = true,
           ["Railway crossing A"] = true,
           ["Subsidiary structure D"] = true,
           ["GeneratorF"] = true,
           ["Small house 1B area"] = true,
           ["Small werehouse 3"] = true,
           ["WC"] = true,
           ["Small house 1B"] = true,
           ["Garage B"] = true,
           ["Chemical tank A"] = true,
           ["Train"] = true,
           ["Airshow_Cone"] = true,
           ["Subsidiary structure E"] = true,
           ["Railway station"] = true,
       }, -- end of ["Static Objects"]
   }, -- end of ["Buildings"]
   ["Ships"] = 
   {
       ["Unarmed Ships"] = 
       {
           ["ELNYA"] = true,
           ["Dry-cargo ship-1"] = true,
           ["SOM"] = true,
           ["ZWEZDNY"] = true,
           ["KILO"] = true,
           ["Dry-cargo ship-2"] = true,
       }, -- end of ["Unarmed Ships"]
       ["Other Ships"] = 
       {
           ["speedboat"] = true,
       }, -- end of ["Other Ships"]
       ["Surface Warships"] = 
       {
           ["REZKY"] = true,
           ["PERRY"] = true,
           ["TICONDEROG"] = true,
           ["MOSCOW"] = true,
           ["NEUSTRASH"] = true,
           ["PIOTR"] = true,
           ["KUZNECOW"] = true,
           ["ALBATROS"] = true,
           ["VINSON"] = true,
           ["MOLNIYA"] = true,
       }, -- end of ["Surface Warships"]
   }, -- end of ["Ships"]
   ["Planes"] = 
   {
       ["UAVs"] = 
       {
           ["MQ-1A Predator"] = true,
       }, -- end of ["UAVs"]
       ["Fighters"] = 
       {
           ["MiG-23MLD"] = true,
           ["F-14A"] = true,
           ["Su-30"] = true,
           ["F-16A"] = true,
           ["Mirage 2000-5"] = true,
           ["MiG-29G"] = true,
           ["Su-27"] = true,
           ["MiG-25PD"] = true,
           ["F-16C bl.52d"] = true,
           ["MiG-29K"] = true,
           ["MiG-31"] = true,
           ["F/A-18C"] = true,
           ["F-15C"] = true,
           ["F-16A MLU"] = true,
           ["F-16C bl.50"] = true,
           ["F/A-18A"] = true,
           ["MiG-29S"] = true,
           ["F-15E"] = true,
           ["Su-33"] = true,
           ["MiG-29A"] = true,
           ["F-4E"] = true,
           ["F-5E"] = true,
       }, -- end of ["Fighters"]
       ["Bombers"] = 
       {
           ["MiG-27K"] = true,
           ["Tu-95MS"] = true,
           ["B-1B"] = true,
           ["B-52H"] = true,
           ["F-117A"] = true,
           ["Su-17M4"] = true,
           ["Su-24M"] = true,
           ["Tu-22M3"] = true,
           ["F-111F"] = true,
           ["Tornado IDS"] = true,
           ["Tornado GR4"] = true,
           ["Su-34"] = true,
           ["Tu-160"] = true,
           ["Tu-142"] = true,
       }, -- end of ["Bombers"]
       ["Unarmed Aircraft"] = 
       {
           ["IL-78M"] = true,
           ["E-3A"] = true,
           ["E-2D"] = true,
           ["An-26B"] = true,
           ["MiG-25RBT"] = true,
           ["C-17A"] = true,
           ["An-30M"] = true,
           ["S-3B Tanker"] = true,
           ["A-50"] = true,
           ["S-3B"] = true,
           ["IL-76MD"] = true,
           ["Su-24MR"] = true,
           ["KC-135"] = true,
           ["Yak-40"] = true,
           ["C-130"] = true,
       }, -- end of ["Unarmed Aircraft"]
       ["Attack"] = 
       {
           ["Su-25T"] = true,
           ["Su-25TM"] = true,
           ["Su-25"] = true,
           ["A-10C"] = true,
           ["A-10A"] = true,
           ["P-51D"] = true,
           ["L-39ZA"] = true,
       }, -- end of ["Attack"]
   }, -- end of ["Planes"]
   ["Ground Units"] = 
   {
       ["Artillery"] = 
       {
           ["Smerch"] = true,
           ["SAU Gvozdika"] = true,
           ["Grad-URAL"] = true,
           ["MLRS"] = true,
           ["SAU Msta"] = true,
           ["2B11 mortar"] = true,
           ["SAU 2-C9"] = true,
           ["SAU Akatsia"] = true,
           ["M-109"] = true,
       }, -- end of ["Artillery"]
       ["SAM"] = 
       {
           ["S-300PS 54K6 cp"] = true,
           ["Patriot ln"] = true,
           ["Stinger manpad dsr"] = true,
           ["SA-11 Buk CC 9S470M1"] = true,
           ["M6 Linebacker"] = true,
           ["S-300PS 5P85D ln"] = true,
           ["snr s-125 tr"] = true,
           ["S-300PS 40B6M tr"] = true,
           ["Kub 1S91 str"] = true,
           ["p-19 s-125 sr"] = true,
           ["M1097 Avenger"] = true,
           ["S-300PS 5P85C ln"] = true,
           ["S-300PS 64H6E sr"] = true,
           ["Kub 2P25 ln"] = true,
           ["SA-11 Buk LN 9A310M1"] = true,
           ["Patriot ECS"] = true,
           ["5p73 s-125 ln"] = true,
           ["Patriot AMG"] = true,
           ["SA-18 Igla-S manpad"] = true,
           ["SA-18 Igla manpad"] = true,
           ["Roland ADS"] = true,
           ["S-300PS 40B6MD sr"] = true,
           ["Hawk ln"] = true,
           ["Hawk sr"] = true,
           ["Strela-1 9P31"] = true,
           ["2S6 Tunguska"] = true,
           ["Patriot str"] = true,
           ["SA-11 Buk SR 9S18M1"] = true,
           ["Patriot cp"] = true,
           ["Tor 9A331"] = true,
           ["Strela-10M3"] = true,
           ["M48 Chaparral"] = true,
           ["Stinger manpad"] = true,
           ["Hawk tr"] = true,
           ["Patriot EPP"] = true,
           ["Osa 9A33 ln"] = true,
       }, -- end of ["SAM"]
       ["Unarmored"] = 
       {
           ["UAZ-469"] = true,
           ["LAZ Bus"] = true,
           ["SA-8 Osa LD 9T217"] = true,
           ["IKARUS Bus"] = true,
           ["Predator GCS"] = true,
           ["GAZ-3308"] = true,
           ["SKP-11"] = true,
           ["ATMZ-5"] = true,
           ["GAZ-3307"] = true,
           ["VAZ Car"] = true,
           ["ATZ-10"] = true,
           ["Ural-375 APA-50"] = true,
           ["Ural-375 PBU"] = true,
           ["MAZ-6303"] = true,
           ["Ural-4320T"] = true,
           ["Ural-4320-31"] = true,
           ["M978 HEMTT Tanker"] = true,
           ["ZIL-4331"] = true,
           ["KAMAZ Truck"] = true,
           ["GAZ-66"] = true,
           ["ZIL-131 KUNG"] = true,
           ["Predator TrojanSpirit"] = true,
           ["M 818"] = true,
           ["ZiL-131 APA-80"] = true,
           ["Ural ATsP-6"] = true,
           ["HEMTT TFFT"] = true,
           ["Suidae"] = true,
           ["Ural-375"] = true,
           ["Trolley bus"] = true,
       }, -- end of ["Unarmored"]
       ["IFVs"] = 
       {
           ["BMD-1"] = true,
           ["M1134 Stryker ATGM"] = true,
           ["M-2 Bradley"] = true,
           ["BMP-3"] = true,
           ["BMP-1"] = true,
           ["Marder"] = true,
           ["BMP-2"] = true,
       }, -- end of ["IFVs"]
       ["AAA"] = 
       {
           ["ZSU-23-4 Shilka"] = true,
           ["ZU-23 Closed Insurgent"] = true,
           ["Gepard"] = true,
           ["ZU-23 Emplacement"] = true,
           ["ZU-23 Emplacement Closed"] = true,
           ["ZU-23 Insurgent"] = true,
           ["Ural-375 ZU-23 Insurgent"] = true,
           ["Ural-375 ZU-23"] = true,
           ["Vulcan"] = true,
       }, -- end of ["AAA"]
       ["Other Ground Units"] = 
       {
       }, -- end of ["Other Ground Units"]
       ["EWR"] = 
       {
           ["1L13 EWR"] = true,
           ["55G6 EWR"] = true,
           ["Roland Radar"] = true,
           ["Dog Ear radar"] = true,
       }, -- end of ["EWR"]
       ["Fortifications"] = 
       {
           ["house1arm"] = true,
           ["houseA_arm"] = true,
           ["Sandbox"] = true,
           ["Bunker"] = true,
           ["outpost"] = true,
           ["outpost_road"] = true,
           ["house2arm"] = true,
       }, -- end of ["Fortifications"]
       ["APCs"] = 
       {
           ["M1043 HMMWV Armament"] = true,
           ["BTR_D"] = true,
           ["Boman"] = true,
           ["BTR-80"] = true,
           ["MTLB"] = true,
           ["M1045 HMMWV TOW"] = true,
           ["AAV7"] = true,
           ["MCV-80"] = true,
           ["BRDM-2"] = true,
           ["LAV-25"] = true,
           ["M-113"] = true,
           ["TPZ"] = true,
           ["Hummer"] = true,
           ["M1126 Stryker ICV"] = true,
       }, -- end of ["APCs"]
       ["Tanks"] = 
       {
           ["M-60"] = true,
           ["T-55"] = true,
           ["Leopard1A3"] = true,
           ["Leopard-2"] = true,
           ["M-1 Abrams"] = true,
           ["Leclerc"] = true,
           ["T-80UD"] = true,
           ["T-90"] = true,
           ["Challenger2"] = true,
           ["M1128 Stryker MGS"] = true,
           ["T-72B"] = true,
       }, -- end of ["Tanks"]
       ["Infantry"] = 
       {
           ["Soldier M4"] = true,
           ["Soldier M249"] = true,
           ["Infantry AK"] = true,
           ["Soldier AK"] = true,
           ["SA-18 Igla comm"] = true,
           ["Soldier RPG"] = true,
           ["Paratrooper AKS-74"] = true,
           ["SA-18 Igla-S comm"] = true,
           ["Paratrooper RPG-16"] = true,
           ["Stinger comm dsr"] = true,
           ["Stinger comm"] = true,
       }, -- end of ["Infantry"]
   }, -- end of ["Ground Units"]
   ["Helicopters"] = 
   {
       ["Utility"] = 
       {
           ["CH-47D"] = true,
           ["SH-3W"] = true,
           ["Mi-26"] = true,
           ["Ka-27"] = true,
           ["UH-60A"] = true,
           ["SH-60B"] = true,
           ["CH-53E"] = true,
           ["Mi-8MT"] = true,
           ["UH-1H"] = true,
       }, -- end of ["Utility"]
       ["Attack"] = 
       {
           ["AH-64D"] = true,
           ["Ka-52"] = true,
           ["OH-58D"] = true,
           ["Mi-28N"] = true,
           ["Ka-50"] = true,
           ["AH-64A"] = true,
           ["AH-1W"] = true,
           ["Mi-24V"] = true,
       }, -- end of ["Attack"]
   }, -- end of ["Helicopters"]
} -- end of slmod.unitCategories

 

What other categories might be needed? Planes.Support?

Edited by Speed

Intelligent discourse can only begin with the honest admission of your own fallibility.

Member of the Virtual Tactical Air Group: http://vtacticalairgroup.com/

Lua scripts and mods:

MIssion Scripting Tools (Mist): http://forums.eagle.ru/showthread.php?t=98616

Slmod version 7.0 for DCS: World: http://forums.eagle.ru/showthread.php?t=80979

Now includes remote server administration tools for kicking, banning, loading missions, etc.

Posted (edited)

Depends on what unit attributes are assigned to it. Regardless... that's a ways away.

 

Probably, I should manually re-assign P-51D (and, if applicable, the FW-190) to the "fighter" category- right now, ED classes the P-51 as an attack aircraft like the A-10 or Su-25. I put all multirole fighters in the "Fighters" category though, so definitely, the P-51 would fit better there.

 

Also, maybe I should class the P-51D (and possible future FW-190) somewhere between the helicopters and attack aircraft in the PvP scoring system. Hmm...

 

Edit:

Added "Support and Recon" category to planes; "Unarmed Aircraft" changed to "Transports"; P-51D moved to "Fighters".

 

I think that's good enough for now with that, now I am starting on the display interface, I'll show some screenshots when it becomes operational.

 

Edit 2:

Oh yea almost forgot- I wanted to improve the records kept for friendly fire. For team kills and team hits, the following information is now kept (in separate tables):

[<hit or kill index number>] = {
       time = <number, Unix time (seconds since Jan 1, 1970)>, 
       human = <string UCID, if applicable>, 
       objCat = <string, general object type, like vehicle, ship, plane, static, helicopter>, 
       objTypeName = <string, type name of the object>, 
       weapon = <string, type name of weapon>
}

 

NOW, I think I'm finally ready to create the display system.

Edited by Speed

Intelligent discourse can only begin with the honest admission of your own fallibility.

Member of the Virtual Tactical Air Group: http://vtacticalairgroup.com/

Lua scripts and mods:

MIssion Scripting Tools (Mist): http://forums.eagle.ru/showthread.php?t=98616

Slmod version 7.0 for DCS: World: http://forums.eagle.ru/showthread.php?t=80979

Now includes remote server administration tools for kicking, banning, loading missions, etc.

Posted (edited)

The stats display system is largely complete. I need to do some tweaks to it still. Maybe I need to change the way "-stats show" works. I still need to implement some kind of "top 10" functionality or something.

 

Unfortunately, there's not much I can do to make all the columns line up. Aligning text is pretty much impossible when different characters are different widths.

 

The main menu, "-stats"

attachment.php?attachmentid=77283&stc=1&d=1361169253

 

"-stats me"

attachment.php?attachmentid=77284&stc=1&d=1361169253

 

"-full stats id 10" (page 1)

attachment.php?attachmentid=77285&stc=1&d=1361169253

 

"-full stats id 10" (page 2)

attachment.php?attachmentid=77286&stc=1&d=1361169253

 

There are is some kind of bug with DCS that makes the weapons hit tracking a little buggy for some kinds of weapons, so that's why some of the "hit" information doesn't make sense. It is more accurate for missiles.

1640862970_statspic1.thumb.jpg.79f8a3113f98a0117232ecb06739d204.jpg

2025484087_statspic2.thumb.jpg.25b8cd4fc7b8341961217d35a809bca2.jpg

204382314_statspic3.thumb.jpg.f550e3ab8284b35c3619f658075991df.jpg

127934648_statspic4.thumb.jpg.980a70d3fd9653c934d37266bd73037a.jpg

Edited by Speed

Intelligent discourse can only begin with the honest admission of your own fallibility.

Member of the Virtual Tactical Air Group: http://vtacticalairgroup.com/

Lua scripts and mods:

MIssion Scripting Tools (Mist): http://forums.eagle.ru/showthread.php?t=98616

Slmod version 7.0 for DCS: World: http://forums.eagle.ru/showthread.php?t=80979

Now includes remote server administration tools for kicking, banning, loading missions, etc.

Posted

 

[..] One thing I worry is this: Stats need to be backed-up periodically, and not just when the server shuts down. So, if the server host is having to serialize and save a massive stats file every minute or so, that could lead to a periodic server host stutter. I've created some fairly efficient table serialization functions, but if you're trying to serialize and save a table with like 900 entries in it, each entry of a similar length to the example shown above, that could too much to handle without generating a stutter of greater than ~100ms.

 

There are two potential solutions. The first is for me to try to minimize the size of the stats table. This could definitely lead to less detailed stats being kept. I don't like that. Maybe, however, there could be ways I could logically “compress” the data.

 

The second possible solution is to use a "stats daemon". The stats daemon would be a separate Lua process, started as an executable...

 

I guess there is 3rd option: You can try to perform the serialization in a seperate thread, in this way the lua-executing thread would not block. You could try to implement is as an coroutine (async-operation)-> http://lua-users.org/wiki/CoroutinesTutorial

[sigpic][/sigpic]



Flanker driver since 1996

Posted
I guess there is 3rd option: You can try to perform the serialization in a seperate thread, in this way the lua-executing thread would not block. You could try to implement is as an coroutine (async-operation)-> http://lua-users.org/wiki/CoroutinesTutorial

 

Actually coroutines do in fact block execution of DCS- coroutines are not parallel processing. What coroutines are is just a fancy way to split a long calculation into a series of discrete steps. So, if you get into an infinite loop in your coroutine, you will get DCS stuck in an infinite loop too (unless your infinite loop is escaped out of with coroutine.yield- in which case, you will just resume the infinite loop again with the next call of coroutine.resume).

 

Anyway, splitting a long calculation into smaller bits is still useful- I use it in Mist and Slmod v7 to calculate the active units database in small enough steps that this calculation will not cause a microstutter even on fairly slow machines running really huge missions.

 

If I do need to eventually make some serialization function for SlmodStats that will run real-time, while the mission is running, then the idea of doing it in a coroutine is a good one. However, like I said earlier in the thread, for now I found a way of writing stats that I like better- computationally, it's much more efficient than serializing, and no stats are ever lost due to CTDs.

Intelligent discourse can only begin with the honest admission of your own fallibility.

Member of the Virtual Tactical Air Group: http://vtacticalairgroup.com/

Lua scripts and mods:

MIssion Scripting Tools (Mist): http://forums.eagle.ru/showthread.php?t=98616

Slmod version 7.0 for DCS: World: http://forums.eagle.ru/showthread.php?t=80979

Now includes remote server administration tools for kicking, banning, loading missions, etc.

Posted (edited)

I will implement a server MOTD (message of the day) system so servers running Slmod won't feel the need to make threads like this one:

http://forums.eagle.ru/showthread.php?t=101450

 

Unless someone has a better idea, my plan is to send the MOTD to players when they join a slot as a trigger text message, not a chat message (though, CA players WILL receive it as a chat message, regardless).

 

But I wonder when the MOTD should be sent? Every time they join a new slot, or just the first time in each mission that they join a slot? Should it be on some kind of periodic repeat as well? If so, players could be very annoyed at this trigger text popping up in their screen periodically. I suppose I should also let players recall the MOTD with "-motd". Do any of you guys have some suggestions?

 

Edit- it is easy enough to allow servers to optionally send the MOTD as a chat message instead- I will provide that option, though I think it's better if it's trigger text.

Edited by Speed

Intelligent discourse can only begin with the honest admission of your own fallibility.

Member of the Virtual Tactical Air Group: http://vtacticalairgroup.com/

Lua scripts and mods:

MIssion Scripting Tools (Mist): http://forums.eagle.ru/showthread.php?t=98616

Slmod version 7.0 for DCS: World: http://forums.eagle.ru/showthread.php?t=80979

Now includes remote server administration tools for kicking, banning, loading missions, etc.

Posted

Hi,

 

Just a quick question if I may.

 

I have installed V6.3 but for some reason the server is paused when started. People can join and the administration works but remains paused

(even when people jump into aircraft) until the Administrator un-pauses it for the first time. After that there is no problems.

 

I have disabled "pause when empty" anything I have missed.

 

Thank you.

 

Ps .. Anyone have a Newbie Admin Guide ?

Posted
Hi,

 

Just a quick question if I may.

 

I have installed V6.3 but for some reason the server is paused when started. People can join and the administration works but remains paused

(even when people jump into aircraft) until the Administrator un-pauses it for the first time. After that there is no problems.

 

I have disabled "pause when empty" anything I have missed.

 

Thank you.

 

Maybe you should have pause_when_empty ENABLED.

If it is enabled, then it should automatically unpause when someone joined the server, regardless of your setting in network.cfg.

 

I will be looking at changing this feature slightly- a better implementation is to have the server unpause when someone joins a SLOT, instead of just connecting.

 

Ps .. Anyone have a Newbie Admin Guide ?

I need to get around to making a multiplayer server set-up guide. I have been intending to do some for some time.

Intelligent discourse can only begin with the honest admission of your own fallibility.

Member of the Virtual Tactical Air Group: http://vtacticalairgroup.com/

Lua scripts and mods:

MIssion Scripting Tools (Mist): http://forums.eagle.ru/showthread.php?t=98616

Slmod version 7.0 for DCS: World: http://forums.eagle.ru/showthread.php?t=80979

Now includes remote server administration tools for kicking, banning, loading missions, etc.

Posted

Sounds great!

 

When the server is stopped, hangs, crashes, etc, will the stat collection be saved? Dumped into a log file or something?

 

Will you have an option to write the stat collection to a file?

Posted
Sounds great!

 

When the server is stopped, hangs, crashes, etc, will the stat collection be saved? Dumped into a log file or something?

 

Will you have an option to write the stat collection to a file?

 

Yes, stats are saved continuously as a file. When the server starts, the stats file is compiled as Lua, and then serialized (converted back into a string), and written back to the file. However, I leave the file handle open, and changes to the stats are written into this file as they occur. This is a very fast process- DCS tells Windows to write to the file, and then goes on its merry way while Windows finds a time to position the hard drive correctly to do the file writing. So you never lose stats due to server crashes, and your server is never waiting for access to the hard drive.

Intelligent discourse can only begin with the honest admission of your own fallibility.

Member of the Virtual Tactical Air Group: http://vtacticalairgroup.com/

Lua scripts and mods:

MIssion Scripting Tools (Mist): http://forums.eagle.ru/showthread.php?t=98616

Slmod version 7.0 for DCS: World: http://forums.eagle.ru/showthread.php?t=80979

Now includes remote server administration tools for kicking, banning, loading missions, etc.

Posted

Thank you for the advice.

 

Just a quick one ... is the MOTD working in the config file and can you auto-restart mission after time period i.e. 4 hours.

 

Sorry for the quextions but converted from Servman yesterday.

Posted
Thank you for the advice.

 

Just a quick one ... is the MOTD working in the config file and can you auto-restart mission after time period i.e. 4 hours.

 

Sorry for the quextions but converted from Servman yesterday.

 

The MOTD will be implemented for Slmod version 7.0. You can use the default MOTD, which provides the players with information on what Slmod menus they can access, or define your own MOTD in the config file. These are the rules I decided for displaying the MOTD, at least for now:

 

When you join a slot, you are sent the MOTD. Additionally, the MOTD cannot be sent to you more often than once every 10 minutes- so you will not get spammed by the MOTD if you are rapidly switching through spots at the beginning of the mission, you will just get it once. If you fly for two hours, and then switch spots, you will be sent the MOTD again. If you leave the server and come back, you will be sent the MOTD.

 

The MOTD can be recalled at any time by saying "-motd" in chat. By default, the MOTD is sent as trigger text, displayed for 20 seconds, but you can change that as well in the config file.

Intelligent discourse can only begin with the honest admission of your own fallibility.

Member of the Virtual Tactical Air Group: http://vtacticalairgroup.com/

Lua scripts and mods:

MIssion Scripting Tools (Mist): http://forums.eagle.ru/showthread.php?t=98616

Slmod version 7.0 for DCS: World: http://forums.eagle.ru/showthread.php?t=80979

Now includes remote server administration tools for kicking, banning, loading missions, etc.

Posted (edited)

Regarding your mod

 

Hello there and thanks for creating this sweet and clean mod. I only recently started hosting the Fightgenossen.ch - Noobforce Training server including SLMod. Since it didn't take long for 1-2 griefers to show up i noticed that ED did not supplement hosts with a ban feature, so I stumbled upon this little gem. Installation and application was a breeze.

 

events_output = true

 

Doesn't seem to work for me though. The file is created, but it remains empty. It's not write protected and seems to have same rights between User/Admin account on first glance.

 

Also Pause on empty seems to bug out for me. Cannot unpause with "Pause" Key or admin command after starting my server. Don't really need the Pause function anyway, but just my feedback.

 

 

Regarding your work on a possible score system

 

I find that idea extremely compelling. Although I'm only some lame C#/OOP Noob (Don't even know if LUA has anything to do with OOP) I would be totally happy to try and contribute to your Mod regarding the "Score/Stat System". I know this kind of offers usually sound pointless, especially because I'm not an experienced programmer. Barely get my head around class/object concepts. But maybe if I get a crash course into your file/code system and data type conversion, variables/arrays functions and file input/output in LUA it might actually really be a help? Naturally I'm always highly motivated for interesting ideas, when it comes to learning. Not saying I'm not willing to do the needed "Learn LUA" work on my own horseback mostly.

 

I see huge potential in the scoring system. Only looked at your example briefly, but judging from it it would be possible to widen DCS with a rather sophisticated and intriguing "Score" system for people who want to host/play with something more interesting than just "Score X for vehicle A". It would be amazing to implement a more sophisticated system possibly inspired by some of the ideas in Sturmovik 1946 or Rise of Flight but adapted to the problems/needs/challenges of DCS and upcoming CA gameplay:

 

I'm aware that this is a flight sim and the score isn't really an indicator of anything. But an intriguing and fun score system might make the game more appealing for "mainstream" standards, or the new generation playerbase. If it is implemented in a smart way it can surely be a true addition/option to DCS, for veterans and noobs alike. I loved the fact, that you would get double the score for kills/vehicles if you managed to get back to a friendly airfield and land succesfully in Sturmovik. It doesn't sound like a huge difference, but that little detail actually made the multiplayer rather immersive and gave some scorebased, playful incentive to try hard and get back alive. Especially when having amassed a lot of points on the sortie.

 

Rise of Flight has some interesting types of "default" mission goals needed for a team to actually win over the enemy team. Apart from the rather usual/simple mechanic of reaching a certain number of score tickets or vehicle/unit kills: For example. Destroy enemy recon "balloon", Bomb Industrial facility XYZ, Recon Area XYZ by flying a certain path from A to B in a certain altitude range, bomb/kill a specific convoy (Maybe even train? I don't remember) - But even the train objective might be feasible in DCS, if it returns an individual kind of message somehow or there is a way to ID that kind of stuff and "pass" it to SL Stat/Score Mod. Anyway if all the objectives are completed by one side they would win, regardless of unit-numbers or tickets. "Warning"/Recon messages would actually warn the team if enemies would be approaching a specific mission goal and therefore create rather interesting Attack/Defend situations.

 

 

I am talking about score systems like:

 

 

  • "COOP Combo Bonus", Multiple your Points attained, by actually destroying vehicles which were passed to you through Datalink by teammates... You could even give the designator and receiving players points as a reward/incentive.
  • And/Or: Attain a timebased score multiplier for every 300 seconds of your vehicle actually being within an active hotzone. Pinball scoring system anyone? wink.gif
  • Get additional score for fighting and achieving kills against "all odds". i.e. 1 Red Fighter getting 3x killscore if he scores a kill in proximity of 3 Blue Fighters.
  • Get additional score for evading missiles fired at you by an enemy.
  • Get additional score for making it back to your homebase as a Striker after being Spiked/Locked by an enemy fighter.
  • Get additional score or multipliers for successive enemy players killed without landing/dieing.. or even.. additional bonuses when not being hit in that time. etc.
  • Get 20% of an enemy players currently amassed/stored sortie score on kill.
  • Reward additional points to a fighter if he succesfully defends a friendly Striker player unit (which has accepted the task of bombing a certain enemy mission goal) from a close by enemy Fighter. Or reward additional points for kills close to your own or enemy hotzone/goals. (Attack/Defense bonus points)

Combine that with CA, real Sim possibilities and a smart/positive scoring system and you can actually lead the game mechanic in a better direction, adapting to gameplay limitations or problems. Like designers of "board games" do.

 

I really don't know the limitations or possibilities of LUA/Modding and DCS. But from what I have seen up to now, some really nice S*** could be actually done. A sophisticated Score/Goal system might even help with the success of CA, since you have means/tools to actually lead the game/mechanics in a direction which makes it "balanced" and intriguing Team vs. Team. Despite being a simulator with natural "imbalance"; After all, a striker group repeatedly trying to reach Waypoint A vs. 5 enemy FC3 Fighters and one single F15 on your own team... for hours. That's just terrible game/map design. Simulation or not.

 

Probably the best example to illustrate what my motivation/idea is, is the last bullet point from the score example. Regarding the issue with fighter/striker imbalance. If you implement a system where Fighter/Striker/Commander/FAC player balance on a server must remain even. And additionally automatically reward fighters score rewards for actually protecting friendly bombers... you eliminate the need for TS or demanding player-driven "cooperation". You just build into the game, its rules.. or scoring system.

 

If the player, as an individual is kind of directed lead to reach specific goals, and those goals are diverted geographically, plus he has different.. possibly even dynamic options to choose from in regards of accumulating score or making your side win. This can actually neutralize the issue of people not communicating in CA team vs. team in DCS and actually remove the need for Teamspeak or private servers, i.e. organized teams to attain some interesting/balanced Team vs. Team gameplay. AKA: a nice DCS "War" Simulation every one of us likes so much.

 

What I am seeing online and with CA/FC3 right now. Is actually not much.. tbh. All we have is low-fidelity ground units, commander/strategy possibilities and lasering fog of war etc. I doubt it will get to something interesting and balanced on PUBLIC servers, when max. 4-5 players per side are sitting on Teamspeak (Out of 30 players) total. And even if they try to communicate, the others are not on TS, its just gonna be flawed nonetheless, even if there are comms between fighters protecting/clearing for A2G units for the usual, rather "simple" DCS mission "ideology", i.e. clear waypoint after waypoint. It's pretty much unclear and blurred if the community/players/mappers are "mature" enough to make CA work from a Simulation AND Fun Point of View. But if you ask me its up to the Players/Community and ED to make this an amazing platform, be it for Sim vets and Mainstream Sim-Greenhorns.

 

-> More Fun = More Sales = Faster development of DCS Modules.

Make this game even more terrific, accessible and addictive than it is.

 

Sorry for the wall of text, but ye. Some euphoric thoughts of mine. Hopefully people see what I'm getting at.

 

EDIT: NVM about my coding talk btw, just saw the tut vids on your first and noticed i totally misinterpreted what SLmod actually is. Thought its basically an admin mod with its features, and upcoming "score" things... but actually it looks more like a "framework"... In that case I'll see if I can get into LUA regarding DCS World and check out what is possible regarding what I've been talking about in this reply. ;) Wonder where the limitations/possibilities start/end though, regarding DCS World scripting.

Edited by osram

 

Posted
Regarding your mod

 

Hello there and thanks for creating this sweet and clean mod. I only recently started hosting the Fightgenossen.ch - Noobforce Training server including SLMod. Since it didn't take long for 1-2 griefers to show up i noticed that ED did not supplement hosts with a ban feature, so I stumbled upon this little gem. Installation and application was a breeze.

 

events_output = true

 

Doesn't seem to work for me though. The file is created, but it remains empty. It's not write protected and seems to have same rights between User/Admin account on first glance.

 

Also Pause on empty seems to bug out for me. Cannot unpause with "Pause" Key or admin command after starting my server. Don't really need the Pause function anyway, but just my feedback.

 

 

It actually sounds like both are working correctly.

You cannot unpause the server when you are in the server alone if you have pause_when_empty enabled. This is because the server is empty! The server host must always be present in a multiplayer server and thus is not counted. If you have pause_when_empty enabled and you want to temporarily take back manual control of pause/unpausing, simply use the Admin menu commmand "-admin pause override".

 

 

The events output implementation is currently a little non-intuitive- it just outputs the latest events. Read the description carefully:

--Set to true to output the latest events to the file "slmod_events.txt" in \Saved Games\DCS\Logs
events_output = false

-- if the above variable was true, then this variable controls how often the latest events are output
events_out_intv = 5  -- default: events_out_intv = 5, new set of events output every 5 seconds.

 

That's right- only the events that have occurred within the last events_out_intv are output to the file.

 

Why was it done this way? Well, when I started Slmod, I was a Lua noob and I thought that you had to execute all file writes in a single step unless you had the file open in append mode.

 

DCS used to support file append mode, but this changed the same patch as the old, real-time debrief.log file writing was changed (1108). This contributed to my incorrect belief- it turns out the reason for the change in the events file was more arbitrary. However, it's not hard to modify Scripts/UI/debriefing.lua (or any other Lua file that is in or can access the main simulation Lua environment, where the debriefing module lives) to output events in real time to a file using an alternate events serialization method.

 

Anyway, Slmod version 7 changes the events file to be output in a method that is more familiar- events are output to the file as the occur, and the file is only wiped clean on every new mission.

 

Regarding your work on a possible score system

I appreciate your ideas… they are similar to some of the ones I’ve had. However, there is only so much I should try to implement right now.

 

If you want to try to help, try to think of ways to rank PvP players. SlmodStats keeps track of players by pvp kills- kills over losses. Also, it only counts kills if it thinks it was a “fair fight”- for example, a fighter killing a helo or attack plane does not count as a PvP kill, but a helo killing a fighter or attack plane does.

 

So anyway, I’m trying to identify what kind of mathematical equations would make a good ranking system for these PvP kills. I want, for example, someone with 100 kills and 10 losses to be ranked above someone with 200 kills and 300 losses. I also do not want someone with 7 kills and 0 losses to be ranked above the person with 100 kills and 10 losses.

EDIT: NVM about my coding talk btw, just saw the tut vids on your first and noticed i totally misinterpreted what SLmod actually is. Thought its basically an admin mod with its features, and upcoming "score" things... but actually it looks more like a "framework"... In that case I'll see if I can get into LUA regarding DCS World and check out what is possible regarding what I've been talking about in this reply. ;) Wonder where the limitations/possibilities start/end though, regarding DCS World scripting.

It is a multipurpose server mod. It started out as what you say- a scripting framework- but it’s grown. This is because to get the scripting functions I wanted, I had to do/access things like:

 

Output to screen text information as chat or trigger text.

Get and analyze all world events.

View all data in the mission file.

Query just about any imaginable unit property, in real time.

Get chat messages by players.

Build a database of active units.

Get all information about the unit that a multiplayer client is flying.

Have a functioning, highly capable and flexible object-oriented “menu” system.

And so on.

 

With all that complete, I basically had the foundation to expand into new areas, and hopefully give these areas a better treatment than other mods have been capable of doing. No other mod has ever accessed and collected data from more than one Lua environment before; Slmod uses four Lua environments (down from five in Slmodv6_3 – in v7_0, I have withdrawn almost all code from the Export Lua environment- there’s just nothing useful there that I can’t get more easily from somewhere else).

Intelligent discourse can only begin with the honest admission of your own fallibility.

Member of the Virtual Tactical Air Group: http://vtacticalairgroup.com/

Lua scripts and mods:

MIssion Scripting Tools (Mist): http://forums.eagle.ru/showthread.php?t=98616

Slmod version 7.0 for DCS: World: http://forums.eagle.ru/showthread.php?t=80979

Now includes remote server administration tools for kicking, banning, loading missions, etc.

Posted

Last night, I implemented the admin menu command to temporarily enable/disable stats keeping. Now, stats are effectively on "feature freeze" while I review the logic and try to catch any last-minute bugs. The beta version of SlmodStats (and Slmod version 7.0) should hopefully ship out to the first multiplayer servers who have volunteered to help test it tonight- if not tonight, then tomorrow. An earlier version has been running just fine for days now on one of the VTAG servers.

Intelligent discourse can only begin with the honest admission of your own fallibility.

Member of the Virtual Tactical Air Group: http://vtacticalairgroup.com/

Lua scripts and mods:

MIssion Scripting Tools (Mist): http://forums.eagle.ru/showthread.php?t=98616

Slmod version 7.0 for DCS: World: http://forums.eagle.ru/showthread.php?t=80979

Now includes remote server administration tools for kicking, banning, loading missions, etc.

Posted (edited)
I will implement a server MOTD (message of the day) system so servers running Slmod won't feel the need to make threads like this one:

http://forums.eagle.ru/showthread.php?t=101450

 

Unless someone has a better idea, my plan is to send the MOTD to players when they join a slot as a trigger text message, not a chat message (though, CA players WILL receive it as a chat message, regardless).

 

But I wonder when the MOTD should be sent? Every time they join a new slot, or just the first time in each mission that they join a slot? Should it be on some kind of periodic repeat as well? If so, players could be very annoyed at this trigger text popping up in their screen periodically. I suppose I should also let players recall the MOTD with "-motd". Do any of you guys have some suggestions?

 

Edit- it is easy enough to allow servers to optionally send the MOTD as a chat message instead- I will provide that option, though I think it's better if it's trigger text.

 

 

Just a note- servman used to do motd 2 minutes after someone joined and then at a determined interval- I usually chose 25 minutes but everyone has their preference. The message duration was also a variable. You could also call up server rules using a particular command.

 

The other question was how easy it is to build up the automated kick feature? Currently it's quite good (life saver for us)- but only allows one option for kicking or banning or nothing... After a certain number of events you get 1 act... Always ban or always kick... Or always nothing.

 

The penalty box feature was nice- where a person who Tkd a certain number of people (varied by config) would then be kicked for x amount of minutes. If they had x number if such kicks they would be banned. You also had an option to keep track of kicks through all missions or reset the counter with each new mission. This feature was enormously customizable and really helped to fine tune your desired level of protection.

 

Also being able to log in certain trusted squad mates to be immune to these kicks was nice (they're more prone to the legit accidents or incidental glitch kills that result in bring kicked or banned). I'm not sure if admins are immune? This is more pertinent for the open door concept where you have Many more transients passing through looking for a free ride to cause trouble. Frequently they'll just kick spam... Being kicked just to come back and be kicked just to come back- you get the idea. Not sure why people think that's funny- but they do it.

 

Anyway speed I'm just thrilled to see you working so hard on this- and I don't want to come off as "gimme gimme gimme." These are just nice features that I found really helped administrate my server. I'm trying to keep track of all your progress and if you've already talked about this I apologize.

Edited by ENO

"ENO"

Type in anger and you will make the greatest post you will ever regret.

 

"Sweetest's" Military Aviation Art

Posted (edited)

Hi Speed,

Can you add something to the Chat Logs? If possible, I'd like a Server Shut Down time/date stamp? This would be a simple entry that gives the time and date of when the server stopped serving, either due to a manual Disconnect or manual Exit or an unexpected shut down like a DCS Stopped Working error. Hmm, I guess the type of shutdown would also be helpful.

 

Thanks for Slmod. Eno ^^^ and I are sharing the Ban file for use on on our two servers.

 

WC

Edited by Wrecking Crew

Visit the Hollo Pointe DCS World server -- an open server with a variety of COOP & H2H missions including Combined Arms. All released missions are available for free download, modification and public hosting, from my Wrecking Crew Projects site.

Posted
But I wonder when the MOTD should be sent? Every time they join a new slot, or just the first time in each mission that they join a slot? Should it be on some kind of periodic repeat as well?

Edit- it is easy enough to allow servers to optionally send the MOTD as a chat message instead- I will provide that option, though I think it's better if it's trigger text.

 

Speed,

Rather than say, I want it this way...

 

Every option you list could be an Option for the MOTD function.

 

These arguments are not required -

-d99999: Delay On Slot Join in seconds, default is zero, -d is same as -d0 (I would prolly use 20)

-r99999: Repeat Interval in seconds, default is zero: no repeat (I would use ~23 minutes, 1380 seconds)

-c: Use Chat Text, default is Trigger Text if -c not used

 

Wrecking Crew

Visit the Hollo Pointe DCS World server -- an open server with a variety of COOP & H2H missions including Combined Arms. All released missions are available for free download, modification and public hosting, from my Wrecking Crew Projects site.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...