-
Notifications
You must be signed in to change notification settings - Fork 16
/
CHANGELOG
1528 lines (1518 loc) · 136 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
getDefaultModOptions.pl:
=======================
0.1: first public version (beta)
0.2: add "resetmodoptions" to generated battle settings
0.2a: fix "wrong option type" errors in unitsync.log
add optional parameter for Spring data directory
0.3: new optional parameter to specify an output file instead of using stdout (the unitsync library now pollutes stdout)
avoid unitsync re-inits during Spring archives load (use "RemoveAllArchives" unitsync function instead)
0.4: "games" folder is also listed as subdirectory of spring data directory
battle setting "resetmodoptions" is replaced by "resetoptions" (impacts both mod settings and map settings)
removed the deprecated unitsync functions calls
improved error message when failing to load Perl Unitsync module
fixed option sections misrecognized
0.4a: "packages" folder is also listed as subdirectory of spring data directory
0.4b: fixed section separator line appearing even when comments are disabled
0.4c: "mods" folder is no longer listed as subdirectory of spring data directory
make Spring 95 behave like previous versions concerning writable data directory location
0.4d: fix setting ranges and negative values handling
0.5: "step" parameters are now taken into account for number range modoptions
improved handling of float numbers received through unitsync library
show unitsync error messages when unitsync library initialization fails
0.6: revamped command line parameters management using GetOpt
it is now possible to specify unitsync library path as command line parameter (compatibility with new PerlUnitSync interface module)
several Spring data directories can now be specified
0.7: replace the basic list functions any/all/none/notall with those provided by the List::Util Perl module (requires Perl >= 5.19.5)
0.8: use new object-oriented unitsync interface
fix minor output misformatting when modoptions contain an empty section
help.dat:
========
0.1: first public version (beta)
0.2a: typo in !reloadArchives
0.3.0: new commands: mapLink, nextMap, nextPreset, update (commands.conf must be updated, refer to configuration templates for default rights)
0.3.0a: typo in !status
0.3.1: new optional !list parameters (map filters for "!list maps", "all" for "!list [hb]settings")
0.4.0: new command aliases: "!spec <name>" (= "!force <name> spec"), and "!cv <command>" (= "!callvote <command>")
0.5.0: new commands: boss, cheat
0.5.1: add help for "!help bset <battleSetting>" syntax (battle settings help added)
0.5.2: add help for "!reloadConf keepSettings" syntax (configuration reload without altering current settings)
0.6.0: new command: rebalance
0.7.0: new command: learnMaps
0.8.0: new commands: auth, chpasswd
0.8.1: new optional !reloadConf parameters: configuration macros (re)definitions (persistent if "keepMacros" is specified)
new optional !restart parameters: configuration macros (re)definitions
0.8.2: update help for !help command (all settings help is now implemented)
0.9.0: new commands: banIp, banIps, chrank, coop, kickBan, searchUser, smurfs, specAfk, unbanIp, unbanIps
add "ip" filter in !ban syntax
0.9.0a: new optional !smurfs parameter ("all")
0.9.0b: new optional !clearBox parameter ("extra")
0.9.0c: the "!smurfs" command without parameter now performs smurf detection on all players in battle
0.9.1: add example for accountId ban type
0.9.1a: add examples for ban durations using time units ("y": year, "m": month, "w": week, "d": day, "h": hour)
0.10.0: new "#<accountId>" syntax for !ban, !banIp, !banIps, !smurfs, !unbanIp and !unbanIps commands
new "@<ipFilter>" syntax for !searchUser command
new commands: !sendLobby, !whois
0.10.0a: improve "unlock" command description
0.10.1: new "spec" optional parameter for !quit/!restart commands
0.10.2: !nextMap and !nextPreset now use the same rotation mode as rotationEndGame (if end game rotation is disabled, "random" is still used as previously)
0.11: new commands: addBot, advert, joinAs, loadBoxes, removeBot
the "!force" command can now be used for local AI bots too
the "!nextMap" and "!nextPreset" commands are now configured by "rotationManual" preset setting (previously the same setting as end game rotation was used)
0.11.1: new command: !stats
0.11.2: add rotationMaps parameter description for "!list" command
0.12.0: new aliases: "!b" = "!vote b", "!n" = "!vote n", "!y" = "!vote y"
new commands: "!chskill","!plugin"
new !list parameters: "plugins","pSettings"
0.12.0a: fix !balance description (commShare has been renamed to nbPlayerById years ago)
0.12.0b: fix typo in !chskill description
0.12.0c: add optional parameter for "!list bSettings" to filter map/mod/engine settings
0.12.0d: typo "blanc" -> "blank"
0.12.1: !ban/!unban commands now also accept greater/less than (or equal to) notations in filters: >,<,>=,<=
the user's autohost access level can now also be used as a ban filter in !ban command
!ban/!banIp/!banIps commands now take an explicit ban type strings as parameter ("full","battle","spec") instead of ban type codes (numbers 0,1,2)
!ban/!banIp/!banIps commands now also accept durations expressed in number of games
the !unban command now also accepts ban hashes as parameter to ease specific ban entry removal
0.12.2: it is now possible to list aliases with "!list aliases" and to filter settings in "!list settings/hSettings/bSettings/pSettings" output
remove alias entries (!b,!cv,!n,!spec,!y) as they can be listed with "!list aliases" now
0.12.3: the !ban/!unban commands now accept skill based bans (new filters: "skill" and "skillUncert")
0.12.4: the "!force" command can now be used to force full battle balance in one command: "!force * (player1,player2)(player3,player4)..."
0.12.5: the "!force" command can now be used to give resource bonus
0.13.0: removed obsolete !pass command
0.13.1: added fast mode for !reload command (detects archives addition/removal, but not archives modifications)
0.13.2: removed "cpu" filter parameter from !ban and !unban commands
removed "all" parameter from !smurfs command
0.13.3: extend !list command usage to show current vote settings: "!list vSettings"
0.14.0: add !resign command
0.14.1: new "!sendLobby" command syntax: parameter handling in shell mode
helpSettings.dat:
================
0.1.0: first public version (beta)
0.1.1: remove blank lines which aren't shown in help output anyway
typos
0.1.1a: bad type for "votePvMsgDelay" preference
0.1.1b: SPADS no longer installs/updates/uses its own unitsync.dll (Windows) [backport of 0.2.1b]
0.2.0: new global settings: kickBanDuration, minLevelForIpAddr, userDataRetention
new preset settings: extraBox, idShareMode, handleSuggestions, rankMode, shareId
new preferences: handleSuggestions, rankMode, shareId
add help for preference "password"
0.2.1: new allowed value for "idShareMode" setting: "clan"
0.2.1a: "contrib" release type added (contains external unchecked patches)
0.2.1b: SPADS no longer installs/updates/uses its own unitsync.dll (Windows)
0.2.1c: max value of the maxPlayers hosting setting is now 251
0.3.0: new global settings: onBadSpringVersion, maxSpecsImmuneLevel, minVoteParticipation, useWin32Process
new preset settings: ircColors, spoofProtection, clanMode, autoStop, noSpecChat, noSpecDraw
new preferences: spoofProtection, ircColors, clan
0.3.1: new "whenOnlySpec" value for "autoRestartForUpdate" global setting
0.3.2: map names no longer contain ".smf" extension
0.3.3: new "autoSaveBoxes" value allowed: "2" (auto-save map boxes only if there is no start box saved for this map yet)
"%M" is now allowed in mapLink preset setting (map archive name)
0.3.4: new "freeSettings" syntax allowed to restrict free values of each setting
0.3.4a: add "not supported by TASClient" information about "ircColors" preference
0.3.5: new "idShareMode" value allowed: "off" (workaround for 16 IDs max lobby limitation: it totally disables shared IDs, disregarding what is set in battle lobby)
"rotationEndGame" now also determines the rotation mode used for !nextMap and !nextPreset commands
it is now possible to set "map" setting to an empty value in configuration files to use the first map of current map list
0.3.5a: typo
0.3.5b: added syntax for multi-lines welcome messages and private welcome messages
0.3.5c: "%t" is now allowed in welcome messages (time elapsed since game start)
0.4.0: new global settings: forceHostIp, springConfig, springServerType, statusFloodAutoKick, broadcastChannels
new preset settings: rotationManual, minTeamSize, endGameCommand, endGameCommandEnv, maxRemoteBots, maxLocalBots, autoAddBotNb, localBots, allowedLocalAIs,
allowMapOptionsValues, midGameSpecLevel, ghostMapLink, advertDelay, advertMsg
battle lobby message flood and status-change flood detections are now configured by 2 distinct parameters (previously they were both handled by "msgFloodAutoKick")
global setting "msgFloodAutoBan" has been renamed to "kickFloodAutoBan"
global setting "masterChannel" no longer specifies a channel where SPADS reports basic game status mesages (new "broadcastChannels" global setting is used instead)
preset setting "rotationEndGame" no longer determines the rotation modes used by !nextMap and !nextPreset commands (new "rotationManual" global setting is used instead)
preset setting "allowGhostMaps" behaviour now depends on new "springServerType" global setting (ghost maps can't be used with headless server)
preset setting "nbTeams" can take special value "1" for "chicken" type games
preset setting "mapLink" is now only used for local maps
battle setting "resetmodoptions" has been renamed to "resetoptions" and now concerns both mod options and map options
various typos
0.4.0a: fix advertDelay description (advertMessage -> advertMsg)
nbPlayerById, nbTeams and teamSize must be non-null
0.4.1: new preset setting: endGameCommandMsg
0.4.1a: added a few placeholders for end game command settings (startPlayingTimestamp, endPlayingTimestamp, gameDuration)
0.4.2: new preset setting: endGameAwards
minor update for %structure placeholder in endGameCommad and endGameCommandEnv settings
0.5.0: new global settings: pluginsDir, autoLoadPlugins
new preset settings: speedControl, skillMode
new preference: skillMode
rankMode preference now only applies if skillMode preference is set to "clan"
default clanMode is now "tag;pref(5)" (was "tag;pref(10)")
0.5.1: "rank" has been renamed to "skill" in balanceMode setting values ("skill","clan;skill")
fix "password" hosting setting description
0.5.1a: updated "modName" hosting setting description: the mod can also be located in "games" and "packages" subdirectories of Spring data directory
0.5.1b: "statusFloodAutoKick" global setting was misnamed "Message flood auto-kick thresholds"
updated "minLevelForIpAddr" global setting description
0.5.1c: updated "speedControl" allowed values (new range: 1-2)
0.5.2: updated "onBadSpringVersion" description for multi-engine lobby protocol extension
0.5.2a: minor fix in "autoUpdateBinaries" description
0.5.2b: updated "modName" hosting setting description: the mod can no longer be located in "mods" subdirectory of Spring data directory
0.5.2c: update map links default values (thanks abma)
0.5.3: add "cheating" placeholder for endGameCommand and endGameCommandEnv settings
0.5.3a: default value for springieEmulation is now "warn"
0.5.4: the kickBanDuration global setting now also accepts durations expressed in number of games
default kickBanDuration is 300 (5 minutes)
0.5.5: it is now possible to specify multiple Spring data directories through the "springDataDir" global setting
clarify useWin32Process documentation
0.5.6: values "unitsync" and "server" for "autoUpdateBinaries" setting are now deprecated
0.5.7: local AI bots colors can now be configured
0.5.8: the "autoStop" preset setting can now contain a delay value to replace the 5 seconds default
help for "extraBox" preset setting improved
0.5.8a: default value for "onBadSpringVersion" global setting changed (multi-engine lobby protocol extension is now used by default when needed)
0.5.8b: fix wrong default value in "maxSpecs" preset setting documentation
0.5.9: new allowed value for "endGameAwards" preset setting: "2" (enable end game awards for all games)
0.5.10: the "minVoteParticipation" setting value can now depend on game runing state
fix typos
0.5.11: add information concerning required absolute form of directory settings
0.6.0: removed obsolete global settings: binDir, autoUpdateBinaries, onBadSpringVersion
removed obsolete preset settings: minRankForPasswd, minLevelForPasswd
new global settings: instanceDir, autoManagedSpringVersion, autoManagedSpringDir, unitsyncDir, simpleEventLogLevel, eventModel, maxChildProcesses
following global settings can now contain relative paths: etcDir, varDir, logDir, pluginsDir
when Spring version auto-management is enabled, the "springServer" global setting must now be empty and the "springServerType" global setting must now be defined
the "springDataDir" global setting does not need to contain the Spring data directory containing Spring base files when Spring version auto-management is enabled
the "minLevelForIpAddr" global setting has been renamed to "privacyTrustLevel" as it is used for privacy data in general, not only IP addresses
the default value for "map" preset setting is now empty (use first allowed map available)
the "clan" value for "balanceMode" preset setting has been renamed to "clan;random", to better reflect the fact that the balance is random appart from clans being honored
the "password" hosting setting can no longer be set to special value "_RANDOM_" to use a random password
some config macros used as default setting values and valuated during installation have been renamed to better reflect setting names
0.6.1: the "autoManagedSpringVersion" global setting now accepts "maintenance" value in springRelease field (to stay up to date with Spring maintenance builds)
0.6.2: default value for "autoLockClients" global setting is now "64"
clarify "autoLockClients" and "autoLock" settings differences
0.6.3: event loop time slice is now configurable (extended format of "eventModel" global setting)
0.6.4: support new placeholders in "welcomeMsg" and "welcomeMsgInGame" preset settings: "%p" for current global preset, "%P" for description of current global preset
0.6.5: update documentation for "idShareMode" (it is no longer required to set "idShareMode" to "off" to enable workarounds for lobby protocol limitations regarding maximum team and ID numbers)
0.6.6: the "colorSensitivity" global setting now also accepts value "-1" to use a new color assignment algorithm taking game mode and battle structure into account
0.6.7: fix "lobbyHost" global setting allowed and default values
update description of "autoManagedSpringVersion" global setting (add engine auto-management using GitHub releases + remove obsolete "maintenance" branch support)
0.7.0: new global settings: lobbyTls, bansData, mapInfoCacheData, savedBoxesData, trustedLobbyCertificatesData, preferencesData, sharedDataRefreshDelay, sequentialUnitsync, majorityVoteMargin, awayVoteDelay
add documentation regarding the fact that vote settings can be overridden in the commands configuration file (commands.conf)
change default value of "springieEmulation" global setting from "warn" to "off"
change the "colorSensitivity" setting type from global setting to preset setting
0.7.1: the "lobbyReconnectDelay" global setting now accepts a range for delay randomization
0.7.2: fix default value of map link settings in doc
0.7.3: update description of "autoManagedSpringVersion" global setting (add "unstable" engine release from GitHub)
0.7.4: add new placeholders for "promoteMsg" global setting ("%P": number of players in battle, "%S": number of spectators in battle, "%U": total number of users in battle)
0.7.5: new engine version auto-management functionalities (multi-branch GitHub release tags, Recoil engine shortcut and BAR rolling releases)
PerlUnitSync.pm:
===============
91.0a: first public version, based on Spring 91 unitsync API header file (Windows)
91.0b: remove functions obsolete in Spring 104+
91.0c: localize variable $_ (improve AnyEvent stability)
91.0d: improve handling of Windows error messages (support more error codes)
106.0a: restore compatibility with all unitsync versions
import requested unitsync functions only, on the fly
use FFI::Platypus instead of SWIG pre-compiled wrappers (Linux)
106.0b: change to object-oriented model for multiple simultaneous unitsync libraries support
add optional libstdc++ preload to workaround conflicts with versions statically linked in unitsync when multiple libraries are loaded simultaneously
spads.pl:
========
0.0.3: first public version (beta)
0.0.4a: fix disconnection from lobby server when adding 2 start boxes for same team
0.0.4b: fix "!list users" output for filter values of "0"
0.0.4c: add update.pl component
SpadsUpdate can now print messages on standard output
!exit added to Springie emulated commands
0.0.4d: fix minor autoBalance and autoFixColors bug when autoBlock* settings were activated
0.1.0: new functionnality: load a preset automatically when a map is changed
new functionnality: prevent starting a game with too few players
add an explicit message when teams are "auto-blocked" and someone tries to use "!force <player> team/id ..." commands
add auto-update version in !version output
0.1.0a: map rotation now also auto-loads map presets when autoLoadMapPreset is activated
0.1.0b: improve vote messages for away-vote mode
make auto-balance works when there is less players than nbTeams (for advanced auto-balance mode with FFA)
add current mod and map to !status output
0.1.0c: !exit is now an alias for "!stop" only, instead of possibly "!callvote stop" when autoCallVote is enabled (springie emulation)
0.1.0d: fix perm bans with reason (it wasn't possible to add a permanent ban when setting a ban reason)
0.1.1: if needed, the latest players who joined are automatically set as spectators on nbTeams or nbPlayerById settings change
decrease verbosity of master channel messages
improve force-spec and bot-kicking messages for autoSpecExtraPlayers functionnality in FFA mode (teamSize=1)
0.1.1a: fix autoSpecExtraPlayers behaviour on nbTeams or nbPlayerById change
0.1.1b: when autoLoadMapPreset is enabled and no map preset is found for a map, the "_DEFAULT_.smf" preset is loaded instead if available
0.1.1c: it is now possible to make SPADS join passworded channels by adding the password after the channel name
0.1.1d: fix for passworded channels
0.1.1e: improve auto-update information in !version output
0.2.0: new commands: !mapLink, !nextMap, !nextPreset, !update (commands.conf must be updated, refer to configuration templates for default rights)
%a can now be used in welcomeMsg setting for map link url
0.2.0a: fix !exit alias (springie emulation)
0.2.0b: do not show mapLink in "!list settings"
0.2.0c: remove welcomeMsgInGame from "!list settings" output too
0.2.1: preset auto-rotation (and map auto-rotation when using map presets) is no longer allowed to auto-load a preset that would force players to spec
it is now possible to apply another filter on current map list to select specific maps used for auto-rotation
prevent starting with already in-game players (but spectators sync and in-game status are now ignored)
auto-force start when only unsynced or already in-game spectators are missing
auto-cancel a forceStart vote when game starts
added an optional parameter to "!map list" command to filter maps
!status output improved: "Not connected" is now used when a player hasn't connected yet, and current vote status is printed if a vote is in progress
end-game message now contains game duration
fix command parsing (when severall spaces are added between command and parameters)
fix minor bug in vote status output
use more explicit force-spec messages (explains how to change the teamSize value)
0.2.2: fix map rotation when using sub-maplists
fix detection of preset compatibility with current number of players (auto-rotation)
print the in-game ratio in !hostStats output
"!list settings", "!list hSettings" and "!list bSettings" now print the modifiable settings only (add "all" parameter to see all settings)
0.2.2a: map preset rotation optimized
CPU model is now printed in !hostStats output if available
use explicit messages when rotation cannot be achieved
when only modifiable settings are listed with !list command, it is made explicit in output heading
improve debug message for auto-rotation
0.2.2b: fix bug in in-game ratio calculation
show "map" setting in "!list settings" output
make force-spec messages shorter
print more detailed info in !status output
0.2.2c: fix minor !status output formatting problem
take current battle into account to compute in-game ratio
0.2.2d: when listing modifiable settings only (default "!list settings" output), explain how to list all settings
0.2.2e: fix "Argument isn't numeric in addition (+) at ./spads.pl line 247" message
0.2.2f: add OS and RAM amount in !hostStats output
improve force spec/kick bot messages (they must fit on 1 line at client side to avoid spaming)
0.2.2g: fix restart with macros containg spaces
0.3.0: new command aliases: "!spec <name>" and "!cv <command>" (commands.conf must be updated, refer to templates)
command alias management refactored (it is now possible to call a vote for a command which is an alias)
the battle lobby chat can now be auto-forwarded into game without requiring "!say" (new setting "forwardLobbyToGame")
it is now possible to allow "!<settingName> <value>" syntax instead of "![hbp]set <settingName> <value>" (new setting "allowSettingsShortcut")
same for "!<objects>" instead of "!list <objects>" (example: "!presets" instead of "!list presets")
prevent perl error when configuration cannot be loaded
print the account total in-game time in !hostStats output
0.3.0a: fix game chat duplication when forwardLobbyToGame is on
0.3.0b: fix auto-force start checks
0.3.0c: fix startPosType detection for auto-force start
0.3.1: avoid automatic map rotation when battle is empty and a game is running
refactored !status output (made more generic): new status ("Loading") and new field for Spring detailed version ("Version")
0.3.1a: fix !send command
0.3.1b: typo (fix "Use of uninitialized value in numeric ne (!=) at ./spads.pl line [5634|5678]" messages)
0.3.2: update startscript format ("Gametype" is now set to Mod name instead of archive name, and "MyPlayerName" and "IsHost" tags are now generated)
system uptime added in !hostStats output
status of players who disconnected before finishing loading Spring is now shown correctly in !status output (spring-dedicated bug workaround)
0.3.2a: fix crashes when invalid regexp are used in SPADS commands
0.4.0: new command: !boss - reduces rights of people whose access level is insufficient to execute !boss
new command: !cheat - provides various ways of using cheat commands (commands.conf must be updated, refer to configuration templates)
new alert system: sends private messages to admins when recoverable errors occur (new settings: alertLevel, alertDelay, alertDuration)
workaround for spring-dedicated premature end (when process dies before SERVER_QUIT is received on AutoHost interface)
mod specific sides are now used instead of hard-coded ARM/CORE
colorSensitivity for fixColors functionnality is now configurable (new global setting: colorSensitivity)
callvote messages are now printed on 2 lines instead of 1 (they were too long to fit on 1 line at client side anyway)
minor away-vote mode changes: away-votes are now triggered after 20 seconds instead of 10, and vote state is printed after away-votes
when a game is in progress (server is running AND game has started), !ring doesn't ring anyone if no vote is in progress
check game is running for !say and !send commands
when boss mode is enabled, bosses are listed in !status output
0.4.0a: prevent adding start boxes when startpostype != 2
remove unneeded special cases for "disabledunits" battle setting handling
0.4.1: full generic mod options support through unitsync (mod options no longer need to be defined in battle presets to be modifiable)
"!help bset <battleSetting>" syntax added for battle settings help (global and hosting settings help will come later)
format of logged game chat messages has changed (whispered messages are now logged correctly)
add feedback when "set" commands are issued in private (messages were only sent in battle and masterChannel)
0.4.1a: add hint about "!help bSet <battleSetting>" command in "!list bSettings" output
0.4.2: it is now possible to use a regexp in the "modName" hosting setting with syntax "~<regExp>", for instance: "modName:~Balanced Annihilation V\d+\.\d+"
(it automatically chooses the latest mod matching the regexp each time the "modName" hosting setting changes or !loadArchive command is called)
add support for configuration reload without altering current settings values ("!reloadConf keepSettings")
!voteboss alias added for springieEmulation mode
a mark is added after the default preset in "!list presets" output
0.4.2a: when a regexp is used for "modName" hosting setting, the real mod name is showed in "!list hSettings" output instead of the regexp
0.4.2b: backport of fix 0.5.0c
0.5.0: archives can now be reloaded automatically, based on archive directories modification times (new global setting "autoReloadArchivesMinDelay")
the new preset setting "allowModOptionsValues" specifies if mod options undefined in current battle preset can be modified
"resetmodoptions" battle setting added, it determines if modoptions are reset to default mod values before loading the battle preset
new command: !rebalance - re-balances teams (it changes the random seed before balancing, whereas !balance always balances the same way)
broadcast a message when !stop command is used, so that it cannot be hidden when executed in private
0.5.0a: correct random seed generation for 32-bit systems
0.5.0b: if a quit, restart, close battle, or rehost is scheduled, it is now shown in !status output
if some pending settings need rehosting to be applied, it is also shown in !status output
0.5.0c: fix disconnection from lobby server when trying to remove a non-existing start box
0.6.0: ghost map hosting: it is now possible to host a map in "Choose start position" mode without having it on the server if "allowGhostMaps" is set to 1 (new preset setting)
new command: !learnMaps - learn map hashes from other hosted battles so that it's possible to host them in ghost map mode
maps can be auto-learned for ghost map hosting if the new global setting "autoLearnMaps" is set to 1
refactored "!list maps" output for ghost maps
prevent setting start boxes with split command when startpostype != 2
0.6.1: it is now possible to launch SPADS without any map (but at least the default map must have been "learned" before)
fix "wrong option type" errors in unitsync.log
improve output flood protection (prevent filling network buffer)
"vote*" springie emulated commands always call a vote, even if the user has sufficient rights to execute the command directly
log command execution start/end in debug messages
do not send "!list maps" result when more than 200 maps match the search
0.6.2: refactor loading users handling (it is now performed in PerlAutoHostInterface module and should fix some errors in spads.log)
0.6.2a: when a user has insufficient rights to execute a command due to boss mode, explain it in deny message
output a message when map boxes are saved successfully with !saveBoxes command
0.6.2b: log battle join/leave for the AutoHost too (not only for players) in battle.log if logBattleJoinLeave is set to 1
0.6.2c: do not answer to invalid commands sent on master channel (this command could be handled by another bot)
dump preferences and learned map hashes on configuration reload
fix !update output not showing due to output flood protection changes introduced in 0.6.1
0.6.2d: fix battle leave message never showing for AutoHost
0.6.2e: fix SPADS auto-forcing start when players connected but didn't finish loading
0.6.2f: dump dynamic data before reloading configuration on !reloadConf call, not after...
0.6.2g: take ghost maps into account when computing the map list of a map preset
0.6.2h: download settings help file
0.7.0: experimental Windows support
when the lobby server doesn't require a specific Spring version, Unitsync Spring version is used for ghost map hosting (not "*")
new global setting: autoUpdateBinaries (for Linux/UNIX: only "no" is allowed; for Windows: "yes", "unitsync", "server" and "no" are allowed)
new preference: "password" (for AutoHost level authentication)
new command: !chpasswd - (re)init a user password for AutoHost level authentication
new command: !auth - authenticate to the AutoHost with the "password" preference
new "auth" field in users.conf (if set to "1", the user must authenticate himself when the lobby server is running in LAN mode)
the !pSet command now requires AutoHost level authentication if the lobby server is running in LAN mode
when connecting to a lobby server running in LAN mode, recommend using AutoHost level authentication through notice messages
0.7.1: optional parameters added for !reloadConf and !restart commands to (re)define configuration macros dynamically
refactor command line arguments parsing and "exec" calls to avoid shell commands injection in new !reloadConf/!restart optional parameters
send ping messages during Spring archives reloads (should avoid timeout on servers with a lot of maps and low RAM)
keep trying to reconnect to lobby server when disconnected due to join flood protection
0.7.1a: disable pending auto-force checks when game start has been forced manually
0.7.1b: fix minor bugs when SPADS is disconnected from lobby server while players are in the battle lobby
0.7.2: TASClient and SpringLobby suggestion messages are now processed as SPADS commands so that it's possible to use the GUI instead of typing commands
0.7.2a: fix error message when trying to lock a battle already locked
0.7.2b: do not learn null map hashes
0.7.2c: fix restart on Windows when installation path contains spaces
download settings help file
0.7.3: all settings help is now available through !help command (!help set <setting>, !help hSet <hostingSetting>, ...)
0.7.4: SPADS HTML doc can now be generated by adding "--doc" to the command line
0.7.4a: fix repository location (planetspring -> planetspads)
0.7.4b: battle is now auto-closed when Unitsync version doesn't match the required version on lobby server
0.7.4c: SPADS no longer installs/updates/uses its own unitsync.dll (Windows) [backport of 0.8.2d]
0.8.0: user data rentention ability: SPADS can now maintain locally a persistent cache of all Spring accounts (names, ranks, ips ...)
new command: !chrank - alters the rank used by SPADS for a specific user when auto-balancing
new command: !coop (alias for "!pSet shareId")
new command: !kickBan - kicks a user and ban him temporarily
new command: !searchUser - gives information about all known users matching filter (requires user data retention)
new command: !smurfs - tries to identify all smurfs accounts of a user (requires user data retention)
new command: !specAfk - specs all unreay AFK players
new commands: !banIp, !banIps, !unbanIp, !unbanIps - ban/unban by IP (requires user data retention)
broadcast a message when a new version of current mod is found locally (requires archive auto-reload)
extra box management to save map boxes of special game types (King of the Hill ...)
it is now possible to detect smurfs and use their real ranks when auto-balancing (requires user data retention)
several ID share modes are now available through new "idShareMode" preset setting and "shareId" preference (coop mode compatibility)
known IPs are now shown in "!status" and "!list bans" output, according to new "minLevelForIpAddr" global setting (requires user data retention)
TASClient and SpringLobby suggestion messages processing (added in SPADS 0.7.2) is now optional (new preference \"handleSuggestions\")
0.8.1: the "idShareMode" preset setting can now be set to "clan" for clan coop by default
improved "!list settings/hSettings/bSettings/pref", "!smurfs" and "!coop" outputs
fixed a bug where SPADS could crash instead of restarting when a game just finished and battle was empty
0.8.1a: added "extra" optional parameter for !clearBox command, to remove all extra boxes (boxes whose number is greater than current number of teams)
0.8.1b: fix !specAfk not detecting away players correctly
0.8.1c: fix repository location (planetspring -> planetspads)
0.8.1d: fix on Windows: starts spring-dedicated.exe from Spring install dir so all DLLs dependencies shoud be found
0.8.1e: battle is now auto-closed when Unitsync version doesn't match the required version on lobby server
0.8.1f: SPADS no longer installs/updates/uses its own unitsync.dll (Windows) [backport of 0.8.2d]
0.8.2: lobby connection stability improved (do not rely on PONG messages only to detect timeouts)
send ping messages during dynamic data dump (should avoid timeout with heavy user data retention and low RAM)
workaround for ghost connection issue on lobby server improved
an error is now logged when an account for which Spring Lobby agreement hasn't been accepted is used (instead of failing silently)
use unsigned map hashes only in startscript (should fix sync issues at game server connection step with some ghost maps)
fix the "!cv smurfs" trick that allowed users to call "!smurfs" directly
the "new mod version detected" message is no longer triggered when manually changing the mod
fix the "Cancelling forceStart vote" message being printed when not needed
0.8.2a: the "new mod version detected" message is no longer triggered when the mod is changed during a configuration reload
0.8.2b: when reloading archives, do not perform full scan of mods whose checksum didn't change (decrease reload time a lot!)
do not count internal computation time for timeout detection
0.8.2c: "contrib" release type added (contains external unchecked patches)
0.8.2d: SPADS no longer installs/updates/uses its own unitsync.dll (Windows)
0.8.2e: when a game is running, clients IP address and port are shown in "!status" output
0.8.2f: avoid unitsync re-inits during Spring archives load (use "RemoveAllArchives" unitsync function instead)
the "!smurfs" command without parameter now performs smurf detection on all players in battle
lobby ranks and effective ranks are now available for privileged users (those who can run !chrank) in "!status" output
fix wrong spectator being kicked on some circunstances when enforcing "maxSpecs" setting
0.8.2g: allow starting games with more than 32 clients (engine can now manage 250 clients)
spring-dedicated.exe output is now redirected into spring-dedicated.log log file (Windows only)
0.8.2h: provide the 'a' compatibility flag when logging on lobby server to receive accountIds
0.8.2i: fix ip-ban dodging
0.8.2j: battle is auto-closed when Unitsync version doesn't match the required version on lobby server
0.8.2k: spring-dedictated.exe can now be installed in a path containing spaces (Windows)
0.8.3: accountIds can now be used for ban and access level filters
accountIds bans are now default ban types instead of username bans (for !ban, !kickban, auto-bans on flood...)
it is now possible to ban by IP even if userDataRetention is disabled (nat traversal must be used and user must be in battle when !banip is called)
accountIds are now shown in !status output
0.8.4: added support for JOINBATTLEREQUEST/JOINBATTLEACCEPT/JOINBATTLEDENY requests for true battle ban instead of auto-kick
preferences are now indexed by AccountId if available, username else (old format preferences are automatically imported)
teams are now automatically rebalanced after each game even if players are the same
fix port being shown for spectators in "IP" field of !status output when game is running
"/me" type battle messages are now also checked for message flood protection (not just command flood protection)
0.8.4a: only allow !chrank and !chpasswd to be applied on users whose accountId is known (preferences are now indexed by account ID instead of user name)
0.8.4b: it is now possible to use time units in ban durations ("y": year, "m": month, "w": week, "d": day, "h": hour), default unit is still minutes
ban reasons containing '|' or ':' are now rejected with an error message (these bans aren't persistent after a restart)
unlockSpec command is now forbidden for banned users (they would be auto-kicked when joining anyway)
0.8.4c: NAT traversal is no longer required to get IP of players joining the battle if lobby server supports JOINBATTLEREQUEST message
0.8.4d: spring-dedictated.exe can now be installed in a path containing spaces (Windows)
0.9.0: IRC-style colors can now be used by SPADS to improve output in private messages (new preference "ircColors")
alternate fork method using Win32 processes is now available on Windows (new setting "useWin32Process")
new command !sendLobby to make SPADS send specific commands to lobby server
new command !whois to list detailed information about an account (requires user data retention)
new alert 'SPR-001' when spring-dedicated crashes
it is now possible to configure the auto-stop-game conditions (new setting "autoStop")
alerts are now automatically acknowledged when problem disappears
battle is now autolocked when both maximum number of players and spectators are reached
new authenticated states (cf users.conf): 0 => unauthenticated, 1 => authenticated by lobby server only, 2 => authenticated by autohost
preference shortcuts have higher priority than setting shortcuts (=>"!shareId test" now changes "shareId" preference instead of "shareId" setting)
it is now possible to set a minimum vote participation to allow a vote to pass (new "minVoteParticipation" setting)
SPADS can now use the new "clan" preference to balance clans, depending on new "clanMode" setting value (thresholds can be set to avoid stacked teams)
unbalance indicator (relative standard deviation of estimated skills) is now printed in !balance/!rebalance outputs
accountIds are now used to index persistent user data (user data retention), which is much more efficient and makes it possible to track renames
new settings "noSpecDraw" and "noSpecChat" to respectively prevent spectators from drawing and chatting with players
it is now possible to reference users by accountId using "#<accountId>" syntax for !smurfs,!ban,!unban,!banIp,!unbanIp,!banIps,unbanIps commands
user data retention is now automatically disabled when lobby server is running in LAN mode, to prevent storing fake data
user data retention statistics are now printed in !hostStats output
it is now possible to search users by IP mask for privileged users ("!searchUser @<ipMask>" syntax)
configurable behaviour when Unitsync version doesn't match required version on lobby server: quit, close battle... (new "onBadSpringVersion" setting)
privileged users can now join as spectator even if maxSpecs is already reached (new "maxSpecsImmuneLevel" setting)
optionnal in-game player spoofing protection (new "spoofProtection" preference)
a warning is now printed if SPADS is running as root on non-windows systems
fix in-game IP format in !status output on Windows systems
0.9.1: prints a warning if bot flag isn't set for the lobby account used by SPADS
improve behaviour when battle lobby is locked both manually and automatically
0.9.2: management of new rank ("Ghost")
added ability to auto-quit/restart when only spectators are in the battle
workaround for corrupted ranks in user data retention
0.9.2a: learn map hashes from demos too (as side effect, should avoid some crashes due to uberserver bugs...)
0.9.3: fix compatibility with UnitSync 0.82.2 (map names no longer contain ".smf" extension)
add dynamic in-game user management through "/adduser" Spring command
0.9.3a: remove auto-update of obsolete springserver dynamic library (Windows)
0.9.3a1: report of 0.9.4a in stable release
0.9.3b: add 'sp' compatibility flag in LOGIN command to receive start script passwords
0.9.4: try the rename method when updating a module in use (Windows)
"%M" is now allowed in mapLink preset setting (map archive name)
improve vote system (wait for minVoteParticipation to be reached even when there only remains "away" voters)
new autoSaveBoxes value allowed: "2" (auto-save map boxes only if there is no start box saved for this map yet)
0.9.4a: split SETSCRIPTTAGS and DISABLEUNITS commands to stay below the server command size limit (1024)
0.9.4b: fix minor bug in "!list bans" output
handle midgame joiners in !status output
fix total in-game time retrieving for uberserver
use quit messages when exiting/restarting
fix auto-stop not working properly when all players quit before game start
0.9.5: it is now possible to specify allowed values for each setting listed in "freeSettings", so that other values still require vote
ranks taken into account by SPADS for balancing are now shown to regular users too in !status and !whois outputs
fix for in-game player spoofing protection and in-game IP ban with Spring >= 0.82.3
in-game IPs of players using start script passwords are now also stored for userDataRetention
0.9.5a: do not load UnitSync module when a restart for update is needed at startup (makes it possible to switch from Perl 5.10 to 5.12 easily on Windows)
print Perl version in !version output
0.9.5b: fix CWD for UnitSync module according to change in 0.9.5a (Windows only)
0.9.6: heavy refactor to prepare database interface for dynamic data
0.9.6a: workaround for UPDATEBATTLEINFO commands where map name is missing (uberserver bug?)
0.9.7: added chicken-specific balancing mode when nbTeams is set to 1
clan tags are now handled separately from clan preferences
players using clan preferences are now shown in !status output
0.9.7a: fix for new syntax of unitsync Init function
0.9.8: new "idShareMode" value allowed: "off" (workaround for 16 IDs max lobby limitation: it totally disables shared IDs, disregarding what is set in battle lobby)
automatic balancing improved for big battles (32 players limit removed, warning message added when current battle can't be balanced automatically due to lobby limitations)
!nextMap and !nextPreset now use the same rotation mode as rotationEndGame (if end game rotation is disabled, "random" is still used as previously)
fix "order" map rotation mode not following order of map list filters
it is now possible to set "map" setting to an empty value in configuration files to use the first map of current map list
improved clan preference presentation in !status output (the real value is now shown for your own clan preference)
workaround for invalid CLIENTSTATUS commands sent by uberserver (avoid user data corruption)
0.9.8a: fix colors being the same for players having same ID in lobby when idShareMode=off
improve color fixing system to manage more colors
0.9.9: added support for map options
battle settings management optimized to limit data sent to server
0.9.9a: welcome message system improved: battle private messages are now possible to avoid spaming battle lobby (uberserver only), and multi-lines messages support added
fixed spaces management in !sendLobby command
0.9.9b: fix bug introduced in 0.9.6 when searching users by IP
0.9.9c: fix workaround for ghost connection issue on lobby server (message changed in uberserver)
0.9.9d: reconnect to lobby server when SPADS is unable to send messages through lobby socket
0.9.9e: fix broken connection detection
0.9.9f: it is now possible to show time elapsed since game start directly in welcome messages
0.9.9g: !ring now also rings unsynced players, even when they are ready
0.9.9h: battle is now unlocked when maxPlayers player count is reached (but not maxSpecs), even if autolock is enabled, because lobby server will autospec additional players anyway
fixed bug where players joining a game in progress which hasn't started yet were ringed as if they were unready players
Ignore inconsistent CLIENTBATTLESTATUS commands at SPADS kernel level too (was only ignored in lobby interface module)
0.9.9i: fix for a very rare bug which happens when a game ends while a reconnection to lobby server is in progress
0.9.10: spring-headless is now auto-downloaded/updated (Windows only)
minor ring message change
0.9.10a: workaround for inconsistent ADDUSER messages (uberserver bug)
0.9.10b: compute IP rank correctly even if a player is tagged as bot in lobby (was considered as lowest rank before)
0.9.10c: restore original unitsync Init function syntax (revert 0.9.7a)
prevent learning bad map hashes from battles using different engine version ("[engineXXX]" tag in battle name)
0.9.10d: handle new spring version scheme
0.9.10e: real Spring internal IDs and team IDs are now shown in game status (previously lobby ones were shown, as in battle status)
winning players are now identified from client game over messages and printed in battle room at end of game (inconsistent results are discarded as much as possible)
0.9.10f: fix wrong identification of winning players
0.10.0: it is now possible to join a game in progress as player using new !joinAs command
a minimum autohost access level can be required for direct midgame join as spectator (new setting "midGameSpecLevel")
SPADS should now be fully compatible with spring-headless, with optional specific spring settings file (new settings "springServerType" and "springConfig")
when using spring-headless, local AI bots can be (auto)added (new commands !addBot/!removeBot, and new settings "maxLocalBots", "autoAddBotNb", "localBots", "allowedLocalAIs")
the !force command can now be used for local AI bots too
an external program can now be executed at each game end, to handle demo files for instance (new settings "endGameCommand" and "endGameCommandEnv")
multiple channels can now be specified for basic game status reports (new "broadcastChannels" setting), the "masterChannel" is now only used to receive commands
the order in which SPADS fills the teams during TeamFFA autobalancing is now configurable (new setting "minTeamSize")
new advert system to broadcast messages in battle lobby regularly (new settings "advertMsg" and "advertDelay", and new command !advert)
battle lobby flood protection system improved (new setting "statusFloodAutoKick", and setting "msgFloodAutoBan" renamed to "kickFloodAutoBan")
battle lobby flood protection data are now purged regularly (this could have caused a very minor memory leak previously)
the !bKick, !boss, !cKick, !force, !gKick and !kick commands now refuse to execute in case of ambiguous parameters
the !kickBan command now accepts substrings of player name as parameter instead of exact player names (but it refuses to execute if the substring is ambiguous)
improved "chicken" balancing mode (now also works with > 16 IDs)
a specific map link is now used for ghost maps (new "ghostMapLink" setting)
the "games" folder is now also monitored for Spring archives auto-reload
a new setting "forceHostIp" has been added as workaround for systems having IPv6 problems with Spring
map options undefined in current battle preset can now be set as modifiable or not (new setting "allowMapOptionsValues", works the same way as "allowModOptionsValues")
it is now possible to manually load saved startboxes using new !loadBoxes command
the !nextMap and !nextPreset commands now follow the "rotationManual" setting value (new setting) instead of using the "rotationEndGame" one
improved error message when failing to load Perl Unitsync module
removed the deprecated unitsync functions calls
0.10.1: improved bot information in !status output
disabled auto-force start when AI bots are used
0.10.1a: do not try to add players already declared in startscript at start of game
0.10.2: timed events refactored in subfunctions
better management of spectator kicking when maxSpecs value is changed
0.10.2a: fix ifconfig path for Gentoo
0.10.2b: for now %demoName and %gameId are replaced by "UNKNOWN" in endGameCommand and endGameCommandEnv preset settings (will be fixed when Spring 89 is out)
fix minTeamSize behaviour
0.10.2c: do not store IP address of IRC bridge users (they all share same IRC bridge IP address which produces false positives in smurf detection)
truncate long values in !list results to avoid badly formatted arrays
fix auto-balance with minTeamSize != 1
0.10.3: it is now possible to print customizable messages after each end-game command execution (new setting: endGameCommandMsg)
the actual playing time (not taking into account the time spent waiting for ready players in game) is now used for end game rotation delay
0.10.4: argparse.py and replay_upload.py python scripts added to SPADS repository (replay auto-upload system)
end game command is now executed when Spring server process actually ends (previously it was executed on SERVERQUIT message)
implemented fallback method to retrieve game ID and demo name from infolog.txt (for headless and pre-engine version 89 cases)
added a few placeholders for end game command settings (startPlayingTimestamp, endPlayingTimestamp, gameDuration)
automatic rotation when empty now also works when only bots are in battle
0.10.4a: allow multiple exit codes in endGameCommandMsg definitions
0.10.5: awards based on team statistics can now be printed when games end (new setting: endGameAwards)
it is now possible to see statistics for last game (new command !stats)
channels where battle is promoted when !promote command is used are now printed
game data reports are now sent over lobby for historization
0.10.5a: fix maxChatMessageLength behaviour to be consistent with uberserver (should fix bad GDRs)
improve error message when !stats is called while game is running
0.10.5b: only send GDRs if the GDR bot was online on game start (else it will be discarded anyway)
fix vote status message missing when required numnber of yes or no votes is reached but not minimum vote participation
0.10.6: fix vote participation percentages in vote status messages
when rankMode is set to IP, rankMode of other accounts sharing same IP are also checked to inherit from highest "chrank" value
prevent learning bad map hashes from battles using different engine version ("Incompatible" tag in battle name)
make "domination" tag harder to get for micro award
0.10.6a: workaround for Ctrl-M at end of line in GDRs (uberserver removes them)
0.10.6b: do not include chicken-type AI bots in end game awards
game duration is now computed even in case of unfinished game (GDRs and end game data)
0.10.6c: minor award message change
try to show real IP address when a player is using IRC bridge
0.10.6d: show real IP address for spectators using IRC bridge also
0.10.6e: fixed 2 minor bugs (!pass command and noSpecChat setting) which could lead to invalid GDR data
0.10.6f: prevent games to be launched manually with !start when autoBalance is enabled and battle hasn't been balanced yet
check format of IP addresses coming from uberserver (IRC bridge bug)
removed obsolete IRC bridge specific handling
0.10.6g: added parameter "rotationMaps" to "list" command (show maps of current rotation map list)
log levels are now dynamic (changes are taken into account when reloading configuration files)
minor fix in logging message
0.11.0: new dynamic plugin interface, with shared variables, callbacks, helper functions and proxy variables/functions implemented in new SpadsPluginHelper module
new built-in player skill management based on TrueSkill ranking algorithm and asynchronous communications with SLDB (new preference: skillMode)
commands rights granularity improved (new player status: "playing", for players actually playing currently)
improved command alias management (aliases don't need to be declared in commands.conf anymore, the requirements of the real command are used)
modified vote status messages to make remaining required votes clearer
balance operations can now be delayed if skill isn't available for all players yet
the new speedControl preset setting can now be used to configure automatic game speed adjustement based on players CPU usages
command !list extended with 2 new parameters for plugins: "plugins" to list currently loaded plugins, and "pSettings" to list plugin settings
new command !plugin to load/reload/unload/configure plugins dynamically
modified status output management to make it easier for plugins to add custom data
current game type is now printed in !status output (corresponding TrueSkill ranking data are used if skillMode is set to TrueSkill)
!version now also prints the versions of the plugins currently loaded
0.11.0a: allow receiving negative skill values
0.11.0b: added plugin callback to balance battle
modified warning on unknown skill ("unknown account" -> "unrated account")
minor code cleanup (removed unused return value)
0.11.0c: fix bug introduced in 0.11.0b which prevented retrieving TrueSkill for first player joining battle
0.11.0d: minor fix in balancing algo to handle negative skills
0.11.1: "rank" has been renamed to "skill" in balanceMode setting values ("skill","clan;skill")
"updateAliases" plugin callback has been renamed to "updateCmdAliases"
0.11.1a: renamed SpadsPluginHelper to SpadsPluginApi
0.11.2: allow disconnected players who didn't lose yet to reconnect to the battle lobby even if the battle is full, so that they can rejoin the game
improve !status output for TrueSkill, with privacy preference management
0.11.2a: rank and skill are now also shown for bots in !status output (based on "botsRank" global setting)
unrated accounts are no longer considered as degraded mode regarding TrueSkill retrieving
0.11.3: add the access level of the user issuing the !status command to updateStatusInfo plugin callback
improve !status output again regarding rounded skills (new privacy setting value: 2, for full privacy mode)
0.11.3a: make full SPADS configuration shared with plugins
yet another try to improve vote messages
0.11.4: votes are now automatically cancelled when the same command is executed directly (this was only enabled for !forceStart command before)
support for generic process forking
new plugin event callback "onGameEnd"
renammed "updateSkill" plugin callback to "updatePlayerSkill"
updatePlayerSkill plugin callback now returns a scalar value
0.11.5: new bans are now applied on the fly when changing banList or preset (this should fix inconsistent states where newly banned players were only kicked when joining game)
new plugin event callback "onJoinBattleRequest"
0.11.5a: improved minVoteParticipation management
0.11.5b: fix plugin preset settings being unavailable from plugin constructor of manually loaded plugins
fix plugins loaded manually losing their configuration on !reloadConf
fix minor bug in plugin settings shortcuts check
fix minor bug in "!list pSettings" output
0.11.6: separated UPD-001 alert into 3 more specific alerts UPD-001/UPD-002/UPD-003
refactored child processes exit codes handling and added support for exit triggered by signal and core dump detection
handle new spring-dedicated exit code (-1 => desync detected during game) instead of treating it as a crash
avoid printing vote status message when vote is passing thanks to new minVoteParticipation management
fix plugin event callback "onJoinBattleRequest" showing warning when the plugin returns a deny reason
0.11.6a: fix Perl warnings (Use of uninitialized value) when a vote is called while SPADS is disconnected from lobby
fix lobby interface warning (Replacing an existing REDIRECT callback for priority "main") when failing to reconnect to lobby server
0.11.7: use REMOVESCRIPTTAGS command to remove mapoptions on map change now that it is implemented in uberserver
players skills used for balancing are now broadcasted in battle lobby using "game/players/<lowerCasePlayerName>/skill" script tags
players skills used for balancing are now written in start scripts ( [GAME] -> [PLAYER<N>] -> Skill ) and thus accessible from LUA scripts
0.11.7a: the "packages" folder is now also monitored for Spring archives auto-reload (rapid)
fix small variable scope mistake in kickBan handling which could prevent it to work when the banned player is in game but not in lobby
prevent games to be launched manually with !start when autoFixColors is enabled and colors haven't been fixed yet
0.11.7b: prevent executing !unlockSpec command if the player is already in the battle (this case was handled by commands.conf previously)
0.11.7c: add "hosttype" script tag to let lobby clients know what type of host they are in
0.11.7d: use new SpeedControl range (1-2)
0.11.8: the skill uncertainty is now shown in !status output as one or severall '?' after skill values
0.11.8a: adjusted the uncertainty threshold for '?' in !status output (almost all players had a '?' previously)
0.11.9: players skill uncertainties are now broadcasted in battle lobby using "game/players/<lowerCasePlayerName>/skilluncertainty" script tags
players skill uncertainties are now written in start scripts ( [GAME] -> [PLAYER<N>] -> SkillUncertainty ) and thus accessible from LUA scripts
0.11.10: added support for multi-engine lobby protocol extension (automatically enabled when unitsync Spring version doesn't match lobby server default Spring version)
new plugin event callbacks "onVoteRequest,postSpadsCommand,preSpadsCommand"
new plugin customization callback "filterRotationMaps"
IDs are now assigned to players in descending skill order also when idShareMode is set to manual
removed warning messages when trying to learn maps from hosts not using map hashes
0.11.10a: changed lobby connection timeout detection algorithm (should be less intensive on PING command usage)
increased lobby timeout from 30s to 1min (should save some disconnections from lobby server, but require more time to detect server downtimes...)
0.11.10b: use multi-engine protocol extension silently if lobby server does not broadcast any default engine version
0.11.11: improved handling of special characters in GDRs
PerlLobbyInterface and PerlAutoHostInterface renamed respectively to SpringLobbyInterface and SpringAutoHostInterface
removed obsolete Springie-ELO retrieving code
0.11.11a: minor improvement for PING command when lobby server is unresponsive
0.11.11b: changed rank <-> TrueSkill mapping to be consistent with SLDB initialization values (only impacts unrated players)
escape '!' character in GDRs
0.11.12: distinguish undecided games (= aborted games) from draw games (= tie games)
0.11.12a: do not request skill when accountId is 0 (uberserver bug)
remove temporary getSkill interface version number
0.11.12b: workaround for bugged unitsync interface on 32-bit Linux systems
0.11.12c: the "mods" folder is no longer monitored for Spring archives auto-reload
make Spring 95 behave like previous versions concerning writable data directory location
0.11.13: remove old IRC bridge handling
cache Spring version returned by Unitsync
use Spring version dependent packages auto-update (Windows)
0.11.13a: use ANSI colors on Windows too
0.11.14: new plugin customization callbacks "addStartScriptTags,changeUserAccessLevel,forceCpuSpeedValue"
0.11.14a: fix cpu not shown in !hostStats output
0.11.14b: handle "!map" (with no parameter) as "!nextMap"
0.11.15: new plugin dependencies system
battle context and players defeat times are now stored in end game data and available for plugins
springServerType is now shared with plugins
do not count UPDATEBOT lobby commands in lobby status flood checks
minor fix in plugin customization callback "forceCpuSpeedValue"
fix typo in plugin skill management (plugin skills were appearing as unknown skill type)
0.11.16: map start positions are now also stored in map info cache file
prevent starting a game using fixed or random start position types if there aren't enough start positions on the map
0.11.17: use new "cl" compatibility flag for multi-engine support (instead of the obsolete "eb" flag)
allow Spring version string to contain special characters
0.11.18: improve vote system: players can now change their votes, and trying to call same vote as current vote is now handled as voting yes
players skill classes are now written in start scripts ( [GAME] -> [PLAYER<N>] -> skillclass ) and thus accessible from LUA scripts
prevent starting a game using "Choose in game" start position type if no start box is set (!forceStart is now required in this case)
use /kickbynum instead of /kick when kicking players from game (/kick is dangerous due to substring matching)
disable workaround for bugged noSpecDraw behavior if Spring version is > 95 (behavior was reversed previously)
remove old workaround used for backward compatibility with obsolete modules PerlLobbyInterface and PerlAutoHostInterface
0.11.19: new plugin customization callback "setMapStartBoxes"
fix setting ranges and negative values handling
print message in battle and game when a plugin setting is changed
0.11.20: new plugin customization callback "setInGameVoteMsg"
0.11.20a: minor fix for !autolock
0.11.20b: minor improvement in gameover detection
0.11.20c: allow plugins to customize lobby vote messages too ("setInGameVoteMsg" customization callback replaced by "setVoteMsg")
0.11.21: handle absolute file names sent by Spring 98 in SERVER_STARTPLAYING messages (should fix replay uploading)
0.11.21a: allow the player concerned by a !joinAs vote to end the vote with the !endVote command
0.11.22: use base64 encoding for GDRs
0.11.22a: always write hostIP in startscript (workaround for spring-dedicated hosting on localhost only by default since Spring 97)
0.11.23: GDRs and endGameData now contain a "cheating" entry which indicates if cheats have been enabled in the game
0.11.24: fix lobby server redirection
add support for new port parameter in REDIRECT command
0.11.24a: add optional parameter for "!list bSettings" to filter map/mod/engine settings
add parameter to "launchGame" function for configurable pre-launch check bypass
0.11.24b: fix "Use of uninitialized value" warnings on invalid !callVote usage
0.11.24c: use "ip" utility to retrieve LAN IPs if "ifconfig" isn't available (thanks gajop)
0.11.24d: onReloadConf plugin callback can now return 0 to indicate configuration reload failed
0.11.25: non-blocking sockets are now handled more generically in a shared structure, this allows plugins to add their own sockets
0.11.26: Spring read-write data directory is now set to SPADS var directory (for engine version 95 and newer only)
remove obsolete code used for map info cache data migration
0.11.27: a lock file is now used to prevent several SPADS instances from using same varDir
a PID file is now written in the varDir
SpadsUpdater now uses a lock file to prevent race conditions instead of a basic flag file
fixed SPADS not restarting correctly on Linux when launched by calling perl explicitely ("perl spads.pl ...")
all messages related to fatal events are now logged at CRITICAL log level (some of them were logged at ERROR log level previously)
reordered initialization code and documentation generation code
0.11.27a: backport of 0.11.35a (download SimpleEvent module to prepare version 0.11.35)
0.11.28: !ban/!unban commands now also accept greater/less than (or equal to) notations in filters: >,<,>=,<=
the user's autohost access level can now also be used as a ban filter in !ban command
!ban/!banIp/!banIps commands now take an explicit ban type strings as parameter ("full","battle","spec") instead of ban type codes (numbers 0,1,2)
!ban/!banIp/!banIps commands now also accept durations expressed in number of games
the kickBanDuration global setting now also accepts durations expressed in number of games
"!list bans" now shows ban entries identifiers (hashes) which can be used in !unban commands to remove specific bans easily
minor improvements in "!list bans" output
the !unban command now also accepts ban hashes as parameter to ease specific ban entry removal
0.11.28a: remove import of "any" function from List::Util (only available in recent Perl versions)
use "//=" syntax instead of "if(defined ...)"
0.11.28b: homogenize quotes and use more efficient list searching functions
0.11.28c: replace unneeded regular expressions by classic string searches
0.11.29: new common aliases from CustomAliases plugin have been integrated into core (!ev,!h,!rc,!rck,!s,!sb,!su,!us,!w)
it is now possible to list aliases with "!list aliases" and to filter settings in "!list settings/hSettings/bSettings/pSettings" output
fix "." not matching all maps when calling !learnMaps with syntax "!learnMaps . <hostFilter>"
0.11.30: skill based bans are now integrated in SPADS core
new fields in banLists.conf file ("skill" and "skillUncert")
the !ban/!unban commands now accept skill based bans (new filters: "skill" and "skillUncert")
0.11.30a: fix "Scalar value @currentVote{...} better written as ..." warnings printed by old Perl versions
0.11.30b: show SPADS version in "Initializing SPADS" log message
0.11.31: new plugin customization callback: "updateGameStatusInfo"
fix duplicate IP field in !status output when plugins update player IP data in updateStatusInfo callback
0.11.31a: timestamps are automatically enabled and colors automatically disabled in STDOUT messages if SPADS output is redirected to a file
0.11.31b: Spring server output logging to <logDir>/spring-<serverType>.log should now be functional for all process spawning modes and all platforms
SPADS now waits until Spring server process has fully exited before restarting
Win32 processes no longer report wrong exit code each time a thread terminates (Windows)
improve parameters escaping when restarting or launching sub-processes (Windows)
reordered initialization code and documentation generation code
minor cleanups and code factorizations
0.11.31c: make Spring directories management through environment variables consistent between Linux and Windows (auto-restart if needed)
log unitsync errors when unitsync Init call fails
simplify restart code
0.11.32: it is now possible to specify multiple Spring data directories through the "springDataDir" global setting
the varDir is now also used by old Spring versions (< 96) as writable data directory
0.11.33: setting environment variables no longer requires a restart except for LD_LIBRARY_PATH (Linux)
the _putenv CRT function is now used to set environment variables so they can be seen by unitsync without restarting (Windows)
clean up int32/uint32 casting code
0.11.33a: backport of 0.11.35a (download SimpleEvent module to prepare version 0.11.35)
0.11.34: factorize process and socket management code
fix LAN IP addresses not detected when DHCP is used (Windows)
fix misformatting of some Win32 error messages (Windows)
0.11.34b: backport of 0.11.35a (download SimpleEvent module to prepare version 0.11.35)
0.11.34a: fix error message when issuing !status in headless mode
0.11.35: use SimpleEvent module which brings AnyEvent support for multi event loop compatibility
0.11.35a: add SimpleEvent to the list of auto-updated modules
0.11.35b: unregister TERM signal when exiting
0.11.35c: fix players readied through LUA not detected as ready by SPADS
0.11.35d: minor fix in !version output for AnyEvent module
0.11.35e: show more detailed info for perl in !version output
0.11.35f: hide meaningless autohost account skill value in !status output when using headless server
0.11.35g: add 7zip binary to the list of packages
0.11.35h: sayChan function now accepts an undefined value as first argument, in this case it sends the message to the master channel
plugin mandatory functions existence and required SPADS version are now checked before loading the module to avoid inconsistent module load state
0.11.36: replace Swig with Win32::API for unitsync library interface, which should make SPADS compatible with Strawberry Perl (Windows)
remove the obsolete PerlUnitSync.dll library from the list of auto-updated binary packages (Windows)
fix binary update workaround on Windows trying to update obsolete packages and resulting in fatal errors (Windows)
0.11.36a: check Win32::API module version at start (Windows)
0.11.36b: fix auto-force start not working when players are readied through LUA
0.11.37: default local AI bots color is now red instead of black
local AI bots colors can now be configured (they have precedence over players colors regarding team colors auto-fixing)
team colors auto-fixing is now only performed after auto-balancing to save useless force commands
0.11.38: new plugin event callback: preGameCheck
0.11.38a: allow plugins to prevent game start without generating a message in battle lobby
0.11.39: the "autoStop" preset setting can now contain a delay value to replace the 5 seconds default
0.11.39a: "step" parameters are now taken into account for number range map/modoptions
improved handling of float numbers received through unitsync library
0.11.40: the "!force" command can now be used to force full battle balance in one command: "!force * (player1,player2)(player3,player4)..."
0.11.41: the "!force" command can now be used to give resource bonus
0.11.42: SPADS no longer fails to start when System Integrity Protection is enabled (macOS)
!hostStats command is now fully functional (macOS)
fix CPU speed and LAN IP address detection (macOS)
0.11.43: new allowed value for "endGameAwards" preset setting: "2" (enable end game awards for all games)
0.11.43a: reorder auto-update checks to avoid useless locks
0.11.44: the "minVoteParticipation" setting value can now depend on game runing state
0.11.45: improve resiliency against lobby server bugs
0.11.46: log Perl warnings through SPADS log system
0.11.46a: fix Perl modules include path (required for Perl releases which don't include current working directory in default include path)
0.11.46b: fix onBattleClosed plugin API callback being called too often
0.11.46c: minor code cleanup (factorize URI escaping code and remove unused variable)
0.11.46d: defer Spring archives loading to speed up SPADS restarts when auto-updating Spring binaries at start (Windows)
minor improvements in startup logs
0.11.46e: presence of lobby accounts tagged as bots in battle lobby no longer blocks automatic default preset restoration and automatic preset/map rotation functionalities
0.11.46f: fix settings help formatting in HTML documentation
0.11.46g: refactor quit/restart handling code to fix minor issue with concurrent pending orders (an auto-restart for update no longer cancels a quit order for example)
presence of lobby accounts tagged as bots in battle lobby no longer blocks automatic restart for update
0.11.46h: ignore bots for smurf detection
0.11.47: ignore "binDir" global setting and use SPADS script location directly (the binDir setting will be removed in next major SPADS release)
do not retrieve the 7za binary on macOS
refactor initialization code to prepare for Spring version auto-management
0.11.48: removed some SPADS functionalities due to unitsync backward compatibility breakage in Spring 104+ to restore compatibility
number of start positions in map is no longer checked before launching a game with start position type set to fixed or random
map width and height are no longer available for map filtering for example
factorize some quit/restart code
0.11.49: the noSpecChat setting is now also honored for messages relayed between lobby and game
0.12.0: new functionality: Spring version auto-management (all Spring binaries can now be automatically downloaded and/or updated)
Spring server binaries auto-update through SPADS packages manager is no longer possible on Windows (the new Spring version auto-management functionality must be used instead)
SPADS event model now uses "AnyEvent" if available (it can be changed using the new global setting "eventModel" instead of the config macro hack)
"instanceDir" global setting is now used instead of "varDir" to store all instance-specific dynamic data
"minLevelForIpAddr" global setting renamed to "privacyTrustLevel" as it is used for privacy data in general, not only IP addresses
SimpleEvent module now has its own log level ("simpleEventLogLevel" global setting)
removed obsolete "onBadSpringVersion" functionality
removed random password functionality (using "_RANDOM_" as value for "password" hosting setting) and !pass command
0.12.0a: localize variable $_ (improve AnyEvent stability)
0.12.1: SPADS is no longer unresponsive during Spring archives reload (unitsync calls are performed asynchronously)
Spring archives reload time is now monitored and logged
!status output now shows if Spring archives are being reloaded
0.12.2: improved Spring archives handling
added fast mode for Spring archives reloading (detects archives addition/removal, but not archives modifications)
0.12.2a: prevent using !promote command when battle is locked or full
0.12.3: workaround for uberserver sending "None" instead of proper integer value as account ID
try to improve resiliency regarding unitsync library crashes
fix rehost loop when trying to host for more than 10 players without bot flag (new lobby server limitation)
0.12.4: Spring version auto-management can now be used to auto-update to maintenance builds of Spring
0.12.4a: fix SPADS restart not working properly in CMD shell on Windows 10
fix memory detection on Windows systems with > 4GB RAM
0.12.5: use new lobby compat flags "l" and "t" instead of the obsolete one "a"
show lobby clients versions in !searchUser command output
add support for server side KICKFROMBATTLE command
fix total account in-game time no longer shown in !hostStats output due to lobby server message syntax change
remove obsolete single-engine mode code (multi-engine lobby protocol is now always used)
remove obsolete code to find CPU speed (this field is ignored by lobby server)
remove usage of CPU speed values to determine possible smurf accounts (this field is no longer provided by lobby server)
remove "cpu" filter for !ban/!unban commands
fix duplicate log lines when SPADS joins a channel (workaround for lobby server sending both JOIN and JOINED commands when joining a channel)
store lobby clients versions data when user data retention is enabled
improve channel topic handling
retrieve full Spring version only once (when unitsync library is loaded), instead of retrieving it each time a (re)connection to lobby server is performed
0.12.6: experimental support for TLS on lobby connection
SpringLobbyInterface module logs are now also printed on standard output
0.12.6a: improve lobby compatibility flags management
0.12.7: TLS encryption is now used by default for lobby server communication if available (requires IO::Socket::SSL module)
TLS status is now shown in !version output
minor optimization in the REMOVESCRIPTTAGS command sent when a player leaves the battle
0.12.7a: fix rehost loop when trying to host for more than 8 players without bot flag
0.12.8: force startPosType battle setting to be sent lower case (workaround for uberserver not converting to lower case as documented)
0.12.8a: fix team balancing not being deterministic on modern perl versions when some players had exact same skill values (!balance was actually acting like !rebalance)
0.12.9: fix !update command triggering reconnection to lobby server on some system
0.12.10: improve noSpecChat mode (prevent some bypass tricks + better logging)
0.12.11: improve balance algorithm for 3v3 when one player has a very low skill value compared to the others (degrade team skill homogeneity in profit of better overall balance)
0.12.12: improve concurrent SPADS auto-update management (instances sharing same installation directory)
enrich !version command output with information about auto-update configuration
0.12.12a: fix minor bug in !version command output (race condition in auto-update delay computation)
0.12.13: fix SPADS opening multiple handles on same log file
cleanup file handles before restarting SPADS (workaround for missing close-on-exec flag causing file handle leak on SPADS restart)
replace forkProcess by forkCall for auto-update management
cleanup exec calls
0.12.14: allow autoBalance and autoFixColors to run simultaneously to speed up automatic battle management
the !balance command now also automatically fixes colors simultaneously if autoFixColors is enabled
0.12.15: improve boss mode usability (only the !boss command originator is made boss initially)
0.12.16: close unused handle on lock file when auto-update is in standby mode (multi-instance mode)
display the Spring server type used by SPADS in !version command output ("dedicated" or "headless")
show instance name and SPADS version in console window title (Windows)
0.12.17: detect when running in daemon mode (no console) and prevent new console creation when SPADS is restarted (Windows)
replace the internal function used to close all non-system filehandles by the one provided by the SimpleEvent module
0.12.18: new plugin event callback "onLobbyLogin"
configuration macros data are now available from plugins
plugin constructors and onUnload callbacks now receive an additional parameter which indicates the context/reason
plugins can now close the battle lobby without triggering broadcast messages
the plugin package namespace is now correctly removed from the symbol table on plugin unload (the "no warnings 'redefine'" pragma is no longer needed in plugins)
forbid configuration setting overrides for critical settings "springServer" and "endGameCommand" when used through !reloadConf and !restart commands
0.12.19: experimental support for shared dynamic data between multiple instances (saved map boxes, bans and trusted lobby certificates)
add a check to prevent some duplicate bans
0.12.20: enrich !version command output with the list of shared data (if any) and SQLite information (if used)
0.12.21: fix CPU and local LAN IP detection when using 64-bit Perl (Windows)
improve handling of Windows error messages (support more error codes)
0.12.22: allow map info cache data to be shared between instances (only one instance needs to build the cache, saving lots of slow unitsync library calls in multi-instance case)
0.12.23: fix end of forked process not always detected properly on Perl 64-bit builds (Windows)
0.12.24: event loop time slice is now configurable (extended format of "eventModel" global setting)
default event loop time slice reduced from 1s to 0.5s to increase global responsiveness
delay between main SPADS checks reduced from 1s to 0.5s to increase responsiveness of automatic functionalities
increased shutdown/restart speed
enforce valid plugin name format in !plugin command
print SPADS process ID in startup log message
fixed some errors generating empty line after log message
0.12.24a: fix error message when restarting for update at start
0.12.25: auto-close lock file handles on forks to avoid I/O race conditions
0.12.26: plugin callbacks for processes, signals, sockets and timers are now automatically removed when the plugin is unloaded
refactor plugin handling code: all plugin code and data are now correctly removed from memory even when the plugin load failed
when configuration is reloaded, the new value for the autoLoadPlugins global setting is now taken into account (new plugins are automatically loaded)
0.12.27: unitsync mod data management refactored to reduce start-up time (for servers keeping lots of mods in Spring data directory)
0.12.28: show current preset and description of current preset in !status output
support new placeholders in "welcomeMsg" and "welcomeMsgInGame" preset settings: "%p" for current global preset, "%P" for description of current global preset
0.12.29: extend usage of following plugin callbacks for Python compatibility: onVoteRequest, addStartScriptTags, balanceBattle, setMapStartBoxes, updateCmdAliases, updatePlayerSkill, updateGameStatusInfo and updateStatusInfo
fix plugin function setMapStartBoxes not being called when loading map boxes manually using !loadBoxes command
show version of Inline::Python module and Python interpreter if used in !version command output
added Inline to SimpleEvent proxy packages list
0.12.30: refactor SPADS status retrieving code
0.12.31: declare proxy packages sooner (fix plugin name not included in error messages during Python plugin auto-loading)
0.12.32: improve workarounds for lobby protocol limitations
support maximum number of teams and IDs allowed by engine (251)
0.12.33: fix team balancing not being fully deterministic in some specific conditions (random balance mode, or AI bots in battle with idShareMode set to "clan" or "manual")
0.12.34: added new optional color assignment algorithm, taking game mode and battle structure into account
trigger color check when balance is modified (allows color fixing algorithms depending on battle structure)
fix minor bug triggering duplicate UPDATEBOT commands when assigning AI bot colors while auto-balance is being applied
new plugin API customization callback "fixColors" (allows implementing new color assignment algorithms)
added protection against inconsistent team/ID configuration in battle lobby (prevents launching game)
fix color fixing being triggered instead of auto-balance when "rankMode" or "skillMode" settings are modified
0.12.35: new plugin event callbacks: "onJoinedBattle" and "onLeftBattle"
0.12.36: minor improvements for some edge cases when balancing battles with clans
thresholds for allowed unbalance induced by clans are no longer cumulative ("clanMode" setting)
0.12.37: added raw time data fields to SPADS status retrieving functions
0.12.38: added experimental sequential mode for unitsync library (prevents concurrent calls from multiple SPADS intances)
0.12.39: improve Perl warnings logs (provide stacktrace to help debugging)
improve cheat mode detection
0.12.40: write SPADS configuration and clan data in startscript
improve support of plugin customization callback "addStartScriptTags" for Python plugin (avoid overwriting data)
0.12.41: add a cache for the preferences data of the players in the battle lobby (fix SQLite error "database is locked" when preferences data are shared between multiple busy instances)
0.12.42: allow default "voteTime" and "minVoteParticipation" values to be overloaded for any command (in commands.conf)
0.12.43: added experimental support of configurable supermajority (aka qualified majority) in vote system
0.12.44: added experimental "awayVoteDelay" setting (configure the delay for automatic votes when players are in away mode, or disable the functionality)
0.12.45: the loaded plugins list is now accessible from plugins
0.12.46: implement new experimental SPADS client API using relayed JSON-RPC protocol ("!#JSONRPC" commands sent in private messages by other lobby clients)
new SPADS client API functions: "getSettings" and "status"
0.12.47: replace the basic list functions any/all/none/notall with those provided by the List::Util Perl module (requires Perl >= 5.19.5)
fix parameter checks for SPADS client API function "getSettings"
0.12.48: minor internal rework regarding SPADS client API
0.12.49: refactor SPADS client API response management to allow asynchronous processing
0.12.50: fix Perl warnings "Use of uninitialized value" occuring when votes timeout (introduced by version 0.12.44)
0.12.51: commands rights granularity improved (new game state : "voting", when the game is not running but a vote is in progress to start it)
0.12.52: valid lobby server TLS certificates (i.e. matching lobby server hostname and signed by a trusted CA) no longer require to be additionally trusted by hash
minor fix for redirection
0.12.53: try to print fatal errors in log files before exiting
0.12.54: refactor the "generatePassword" function to allow custom allowed characters
0.12.55: allow plugins to update skill uncertainty value ("updatePlayerSkill" customization callback)
fix sending of superfluous REMOVESCRIPTTAGS commands for players skill values
0.12.56: extend !list command usage to show current vote settings: "!list vSettings"
improve vote status message: remove total votes counter, take minVoteParticipation into account directly in yes/no counters
fix vote participation calculation when majorityVoteMargin is used
fix handling of majorityVoteMargin when vote delay has expired
fix vote messages showing inconsistent values for maximum number of required yes/no votes when majorityVoteMargin is used
0.12.57: allow using regular expression syntax when declaring allowed mod/map option values in battlePresets.conf (for string type options only)
0.12.58: avoid calling unitsync functions deprecated in Spring 106 [thanks CommanderSpice]
0.12.59: read files directly instead of calling "cat" through shell when retrieving system info
fix typo in !force output when player is not found
0.12.60: add support for auto-management of engine releases from GitHub
fix duplicate log messages when exiting/restarting in some circunstances
0.12.61: improve non-Windows operating systems detection
0.12.62: minor fixes regarding management of players who leave without voting while a poll in progress
0.12.63: workaround for lobby server sending SERVERMSG instead of OPENBATTLEFAILED when the battle opening is denied due to lobby client not using TLS
0.12.64: put "spads.pl" at start of packages list to make manual upgrade message clearer during major SPADS updates
0.13.0: new command: !resign (was previously provided by the "Resign" plugin)
new global settings: lobbyTls, sharedDataRefreshDelay, sequentialUnitsync, majorityVoteMargin, awayVoteDelay (they replace the corresponding configuration macros, which are now obsolete)
new global settings: bansData, mapInfoCacheData, savedBoxesData, trustedLobbyCertificatesData, preferencesData (they replace the "sharedData" configuration macro, which is now obsolete)
vote settings can now be overridden in the commands configuration file ("commands.conf" by default)
make "colorSensitivity" setting dynamic (changed type from global setting to preset setting)
improve setting change detection code
use new unitsync library wrapper mechanism on non-Windows systems (no pre-compilation required anymore)
detect available unitsync functions automatically
map information (width, height and start positions) are now cached again (this functionality was disabled since SPADS 0.11.48 due to unitsync backward compatibility breakage in Spring 104)
check number of start positions available in map before launching a game in fixed or random start position type
refactor dependency checking code
0.13.1: the "lobbyReconnectDelay" global setting now accepts a range for delay randomization
0.13.2: use new object-oriented unitsync interface
remove ugly "self-exec" at start on Linux (LD_PRELOAD trick no longer needed with new unitsync interface)
improve unitsync error logging and management
add progress report for map checksums caching process
improve progress report for map info caching process
0.13.3: try to load TLS module (IO::Socket::SSL) only when required (i.e. when lobbyTls is set to "on" or "auto", or when engine is auto-managed using GitHub)
0.13.4: use host hashes provided by unitsync during login
0.13.5: minor fix for !restart/!reload commands (conf macro redefinitions handling code)
code style and consistency improvements
0.13.6: add new placeholders for "promoteMsg" global setting ("%P": number of players in battle, "%S": number of spectators in battle, "%U": total number of users in battle)
0.13.7: use non-blocking TLS handshake
always allow unique boss to unboss himself
minor fix in broken lobby connection detection
add comments regarding unused timeout callbacks
0.13.8: do not print warnings when current game type changes and SPADS cannot update TrueSkill ratings, if ratings for previous game type were already unknown
fix instant map/preset change just after battle is open when recovering from an offline period longer than rotationDelay
0.13.9: use forked processes for asynchronous processing of engine version auto-management
0.13.10: fix race condition between dedicated/headless server and unitsync that caused the archive cache to be cleared
minor fix in local LAN IP address detection
fix detection of game server already being launched in !forceStart command processing
0.13.11: share "bosses" data with plugins
0.13.12: fix value of $commandResult parameter of "postSpadsCommand" plugin API callback for !callVote and !vote commands
0.13.13: revamp SPADS exit code management
0.13.14: allow setting empty battle settings using "!bSet" command