-
Notifications
You must be signed in to change notification settings - Fork 60
/
corechanges.xml
8610 lines (8610 loc) · 435 KB
/
corechanges.xml
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
<?xml version="1.0" ?>
<ESCRIPT>
<header>
<topic>Latest Core Changes</topic>
<datemodified>12-06-2023</datemodified>
</header>
<version name="POL100.1.0">
<entry>
<date>12-06-2023</date>
<author>Brndd:</author>
<change type="Fixed">crash due to character.clearBuffs()</change>
</entry>
<entry>
<date>12-03-2023</date>
<author>Brndd:</author>
<change type="Added">GetStandingLayers() now has a "includeitems" parameter which allows including or excluding items from the search (default: enabled).</change>
<change type="Fixed">GetStandingLayers() now returns the height of results correctly.</change>
<change type="Added">GetStandingCoordinates( x, y, radius := 0, minz := -128, maxz := 127, realm := _DEFAULT_REALM, movemode := "L", doors_block := 0 ):<br/>
This is a new EScript function that returns an Array of coordinates that are valid locations for a creature to stand on in a given radius around the given coordinates. One example use-case is finding valid spawning locations for NPCs within an area.</change>
</entry>
<entry>
<date>11-19-2023</date>
<author>Turley:</author>
<change type="Fixed">possible deadlock in packethooks</change>
</entry>
<entry>
<date>11-16-2023</date>
<author>Nando:</author>
<change type="Added">UoConvert smartness:<br/>
- MaxTileID is now detected from tiledata.mul (uoconvert) and tiles.cfg (POL).<br/>
- Default width/height for each map id<br/>
- map0 and map1 width can be estimated automatically based on a height of 4096<br/>
- better error handling</change>
<change type="Changed">usedif=1 is now the default in uoconvert</change>
<change type="Removed">UseNewHSAFormat in uoconvert.cfg. This will be detected automatically from<br/>
tiledata.mul size.</change>
</entry>
<entry>
<date>11-12-2023</date>
<author>Kevin:</author>
<change type="Fixed">crash when control scripts end for a destroyed item</change>
</entry>
<entry>
<date>11-08-2023</date>
<author>Turley:</author>
<change type="Fixed">crash due to NPCs after calling ReloadConfiguration</change>
</entry>
<entry>
<date>11-01-2023</date>
<author>Kevin:</author>
<change type="Added">RestartScript() now can restart item control scripts. Similar to NPC scripts, the existing Item control script will terminate and a new one started.</change>
</entry>
<entry>
<date>10-28-2023</date>
<author>Ins:</author>
<change type="Added">ServSpecOpt "UndoGetItemEnableRangeCheck" 1/0 default 0.<br/>
If enabled - on fail to equip item back on character (if it has been taken from character layer)<br/>
and on fail to put item back to backpack will check if item has been taken from position/container that is in default_accessible_range.<br/>
If origin position/container is not in default_accessible_range will skip try to put item to origin position/container (unless item is no_drop)<br/>
and as last resort will drop item at character position (feet). UndoGetItemDropHere executed before UndoGetItemEnableRangeCheck if both are set.</change>
<change type="Added">ServSpecOpt "UndoGetItemDropHere" 1/0 default 0.<br/>
If enabled - on fail to equip item back on character (if it has been taken from character layer)<br/>
and on fail to put item back to backpack drops item at character position (feet), except no_drop items. Attempt to return item in<br/>
origin container will be skipped.</change>
<change type="Fixed">Leftover items in corpse on client side.</change>
<change type="Changed">Added ServerSpecOpt reload to ReloadConfiguration.</change>
</entry>
<entry>
<date>10-23-2023</date>
<author>Turley:</author>
<change type="Changed">added movemode parameter to uo:FindPath, defaults to "L". Before the move mode was fixed to land, now its possible to use the FindPath functionality also for eg sea monsters</change>
</entry>
<entry>
<date>10-18-2023</date>
<author>Turley:</author>
<change type="Added">print/syslog console_color parameter. When used with one of the basicio.em CONSOLE_COLOR constants, or a custom xterm formatting string the output to the console is formatted accordingly. Resets the formatting at the end. Xterm formatting is supported on Linux and Windows11. For syslog only the output to the console is modified not the logfile entry.</change>
<change type="Added">pol.cfg EnableColoredOutput 1/0 to disable formatted output. Default is 1.</change>
</entry>
<entry>
<date>10-15-2023</date>
<author>Kevin:</author>
<change type="Fixed">Changed return values and parameters used by storage module functions to match documentation.</change>
</entry>
<entry>
<date>09-03-2023</date>
<author>Ins:</author>
<change type="Added">repsys.cfg General section "PartyHarmFullCountsAsCriminal 1/0" default 1.<br/>
If 0 OnHarm does not set mobile to criminal when they are in the same party.</change>
</entry>
<entry>
<date>08-30-2023</date>
<author>Kevin:</author>
<change type="Fixed">Client character no longer stutters while moving the character and changing the 'poison' property.</change>
</entry>
<entry>
<date>08-29-2023</date>
<author>Kevin:</author>
<change type="Fixed">Corrected implementation of previous OpenConnection race condition fix.</change>
</entry>
<entry>
<date>08-28-2023</date>
<author>Kevin:</author>
<change type="Fixed">Fixed race condition causing random crashes with OpenConnection.</change>
</entry>
<entry>
<date>06-11-2023</date>
<author>Ins:</author>
<change type="Added">New Character member .parrychance_mod +-int in thousandth. Additive modificator of the parry_chance from the defender when it has shield equipped.</change>
</entry>
<entry>
<date>05-24-2023</date>
<author>Kevin:</author>
<change type="Fixed">Fixed crash when using mysql_fetch_row with a query that does not return any result (eg. UPDATE).</change>
</entry>
<entry>
<date>05-23-2023</date>
<author>Turley / Kevin:</author>
<change type="Fixed">Corrected behavior of dropping items with NoDrop: An attempt from a character to move a no-drop item between regular containers (ie, both containers are not "no-drop exception") will now correctly place the item back into the original container (instead of the player's backpack).</change>
</entry>
<entry>
<date>05-15-2023</date>
<author>Kevin:</author>
<change type="Fixed">Fixed an issue with GetConfigString behavior on large numeric property values.</change>
</entry>
<entry>
<date>05-13-2023</date>
<author>Kevin:</author>
<change type="Changed">Modified functionality of combat.cfg setting WarmodeInhibitsRegen (backwards-compatible). Instead of a boolean 0/1, it is now an enumeration 0-4: none = 0 (default), both = 1, players only = 2, NPCs only = 3.</change>
</entry>
<entry>
<date>04-04-2023</date>
<author>Turley:</author>
<change type="Fixed">Crash when EventQueue is full due to SpeechEvents</change>
</entry>
<entry>
<date>04-23-2023</date>
<author>Kevin:</author>
<change type="Added">PackJSON() now accepts an option for `prettify`. If true, the output string will be indented with new lines.</change>
</entry>
<entry>
<date>03-19-2023</date>
<author>Kevin:</author>
<change type="Added">OpenConnection() now accepts an option for ignore_line_breaks. If set to 1, the connection script will receive events for all incoming socket data and not be restricted to data ending in line breaks, with CRLFs included in the event's value. The connection's transmit method will also not append a CRLF to the message.</change>
</entry>
<entry>
<date>02-28-2023</date>
<author>Kevin:</author>
<change type="Fixed">MultiRef.items now correctly includes items on the exterior stairs of custom houses.</change>
</entry>
<entry>
<date>02-27-2023</date>
<author>Kevin:</author>
<change type="Fixed">DestroyItem(item) will now throw an error if item is a multi.</change>
</entry>
<entry>
<date>02-06-2023</date>
<author>Kevin:</author>
<change type="Added">HTTPRequest() now accepts a flags parameter. If HTTPREQUEST_EXTENDED_RESPONSE is passed as flags, returns a Dictionary with members: 'status', the numeric HTTP status code; 'statusText', the reason phrase; 'headers', a Dictionary of key-values for each header; 'body', the response text body.</change>
<change type="Added">http::WriteStatus(code, reason := "") to change the status of an HTTP response from the web server. If no reason is provided, one will be calculated from the code (if possible). This can only used once before WriteHeader(), WriteHtml(), and WriteHtmlRaw().</change>
<change type="Added">http::WriteHeader(name, value) to write a header to an HTTP response from the web server. This function can be used to change the response's Content-Type from the default "text/html". This can only be used before WriteHtml() and WriteHtmlRaw().</change>
</entry>
<entry>
<date>02-05-2023</date>
<author>Kevin:</author>
<change type="Fixed">Creating an item via item descriptor whose SaveOnExit property has been set to 0 will now properly not save the item during a world save.</change>
</entry>
<entry>
<date>01-11-2023</date>
<author>Turley:</author>
<change type="Fixed">Placing items into a container failed since nightly of 01-05-2023</change>
</entry>
<entry>
<date>01-02-2023</date>
<author>Kevin:</author>
<change type="Added">Target() option TGTOPT_ALLOW_NONLOCAL to allow targeting items owned by other characters (eg. in a snooped backpack).</change>
<change type="Added">Member item.character_owner, returns the Character that owns the item, ie. the character whose backpack or equipped items contains the item.</change>
<change type="Fixed">SnoopScript is properly persisted across saves when changed via item member item.snoopscript.</change>
</entry>
<entry>
<date>01-02-2023</date>
<author>Kevin:</author>
<change type="Fixed">Custom Boat method scripts now properly execute.</change>
</entry>
<entry>
<date>12-19-2022</date>
<author>Kevin:</author>
<change type="Added">SnoopScript to itemdesc.cfg Item descriptors which runs when a character double-clicks an item that is owned by a different character, eg. another character's backpack or an item within that backpack. This can be used to implement the Snooping skill.</change>
</entry>
<entry>
<date>12-17-2022</date>
<author>Turley:</author>
<change type="Fixed">potential crash in client login phase</change>
</entry>
<entry>
<date>12-13-2022</date>
<author>Kevin:</author>
<change type="Added">CreateItemInBackpack, CreateItemInContainer, and CreateItemInInventory now have an x and y optional parameter to specify location in container gump of where to create the item.</change>
</entry>
<entry>
<date>10-24-2022</date>
<author>Crowen(che666):</author>
<change type="Fixed">uo.em Broadcast and unicode.em BroadcastUC renamed requiredcmdLevel parameter to required_cmdlevel to be consistent.</change>
</entry>
<entry>
<date>10-15-2022</date>
<author>Turley:</author>
<change type="Fixed">crash when calling another method inside of a methodscript</change>
</entry>
<entry>
<date>09-27-2022</date>
<author>Brndd:</author>
<change type="Added">CreateNPCFromTemplate() now has a "forcelocation" parameter, which allows creating NPCs even in invalid locations.</change>
</entry>
<entry>
<date>09-21-2022</date>
<author>Kevin:</author>
<change type="Added">POLCore() member "poldir", returning the directory of the POL executable.</change>
</entry>
<entry>
<date>08-25-2022</date>
<author>Yukiko:</author>
<change type="Added">uoconvert now surfaces the partial hue flag in tiles.cfg for tiles that have that flag set in tiledata,<br/>
eg. PartialHue 1</change>
</entry>
<entry>
<date>08-21-2022</date>
<author>Turley:</author>
<change type="Fixed">PopupMenu request did not work when client canceled a request and sends a new one.</change>
</entry>
<entry>
<date>08-14-2022</date>
<author>Turley:</author>
<change type="Changed">SendPopUpMenu supports now the new pkt format added with 6.x client, it will be automatically used if needed.<br/>
The new format does not support color, but removes the limitation of valid cliloc numbers.</change>
<change type="Fixed">insurance reset performed after death didnt increase the revision.</change>
</entry>
<entry>
<date>07-01-2022</date>
<author>Kevin:</author>
<change type="Added">Boolean property `item.cursed` and corresponding itemdesc.cfg `Cursed` property. There is no special core handling of cursed items, eg. gold coin objtype 0x0EED that is cursed can still be used for vendor transactions.</change>
</entry>
<entry>
<date>06-21-2022</date>
<author>Turley:</author>
<change type="Changed">OpenXMLFile(file) returns Error if file does not exists, or any parsing error occurs.<br/>
Before it returned XMLRef in an error state, so 'if (!xml)' was and is a way to check for success.</change>
</entry>
<entry>
<date>06-16-2022</date>
<author>Kevin:</author>
<change type="Fixed">Corrected objref documentation on Character.acct, Character.acctname, and Client.acctname.</change>
<change type="Added">client.acct member to return Account object</change>
<change type="Fixed">Accessing properties on a Client that do not exist no longer results in a shard crash.</change>
</entry>
<entry>
<date>04-29-2022</date>
<author>Kevin:</author>
<change type="Fixed">`SendOverallSeason` now checks that connected clients have a character.</change>
</entry>
<entry>
<date>04-12-2022</date>
<author>Kevin:</author>
<change type="Added">Boolean property `client.disable_inactivity_timeout`.<br/>
If true, the client will not be disconnected due to inactivity.</change>
</entry>
<entry>
<date>11-08-2021</date>
<author>Brndd:</author>
<change type="Fixed">Outgoing packets with text field now correctly encode the text as CP-1252.</change>
</entry>
<entry>
<date>11-02-2021</date>
<author>Brndd:</author>
<change type="Changed">SetString packet hook method will now write CP-1252 (extended ASCII) encoded text. This is what is used for the majority of packet fields that are not UTF-16.</change>
<change type="Added">Added a new SetUtf8String packet hook method which will write UTF-8 encoded text.</change>
</entry>
<entry>
<date>09-11-2021</date>
<author>Kevin:</author>
<change type="Fixed">party.AddMember(character) will no longer error if the character is a candidate of the party.</change>
<change type="Changed">party.AddMember(character) will now error if passed an NPC.</change>
</entry>
<entry>
<date>08-30-2021</date>
<author>Nando:</author>
<change type="Fixed">Possible infinite recursion of the attack hook if a character was moved by the attack hook</change>
</entry>
<entry>
<date>08-14-2021</date>
<author>Kevin:</author>
<change type="Fixed">The remaining drop errors (too far away; location blocked) can now be disabled via the ShowWarningItem option.</change>
</entry>
<entry>
<date>08-11-2021</date>
<author>Kevin:</author>
<change type="Fixed">User Functions that conflict with the same name as Module Functions will now result in a compilation error.</change>
</entry>
<entry>
<date>08-03-2021</date>
<author>Turley:</author>
<change type="Fixed">loading of npcdesc AttackCProp and ShieldCProp</change>
<change type="Fixed">loading of itemdesc NoDrop and NoDropException</change>
<change type="Changed">either AttackSpeed or AttackDelay npcdesc entry need to exist for npc weapon creation.<br/>
Before only AttackSpeed lead to an creation.</change>
</entry>
<entry>
<date>07-22-2021</date>
<author>Turley:</author>
<change type="Fixed">Fixed crash when too many items exists an a boat.</change>
</entry>
<entry>
<date>07-21-2021</date>
<author>Kevin:</author>
<change type="Fixed">Fixed bug where a target couldn't be cancelled in some clients.</change>
</entry>
<entry>
<date>06-21-2021</date>
<author>Turley:</author>
<change type="Fixed">HSA boat movement packets (0xF7 and 0xF6) overflow logic. It sends now the correct truncated object count and checks visibility of the objects it sends.</change>
</entry>
<entry>
<date>04-10-2021</date>
<author>AsYlum:</author>
<change type="Fixed">Duplicated internal value for "speedhack" and "losany" privileges. When enabling "speedhack" privilege it also worked as "losany"<br/>
so LoS checks always returned true.</change>
</entry>
<entry>
<date>03-24-2021</date>
<author>Turley:</author>
<change type="Added">os:OpenConnection argument keep_connection<br/>
defaults to 0, if set to 1 the connection is kept active on read timeout.<br/>
By default (old behaviour) the connection is closed when for 5 seconds no pkt was received (old behaviour).</change>
</entry>
<entry>
<date>03-14-2021</date>
<author>Kevin:</author>
<change type="Added">Conditional operator: condition ? exprIfTrue : exprIfFalse<br/>
This new syntax allows you to efficiently return the result of one of the two expressions, depending on whether the conditon<br/>
expression evaluates to true or false.</change>
</entry>
<entry>
<date>03-11-2021</date>
<author>Kevin:</author>
<change type="Added">Interpolated string expression: $"..."<br/>
This new expression syntax allows you to join multiple components into a string. Within the ..., you may specify zero or more:<br/>
- normal strings<br/>
- escaped characters, eg. \n<br/>
- {expression [: format]}, eg. {who.name} or {who.graphic : #x}<br/>
- {{ for a { character, and }} for a } character<br/>
A complete example:<br/>
$"Hello, {who.name}! You are player #{who in EnumerateOnlineCharacters()} online. Your graphic is {who.graphic : #x}."<br/>
... can replace an expression like ...<br/>
"Hello " + who.name + "! You are player #" + (who in EnumerateOnlineCharacters()) + " online. Your graphic is " + Hex(who.graphic)<br/>
... or ...<br/>
"Hello {1}! You are player #{2} online. Your graphic is {3:#x}".format(who.name, who in EnumerateOnlineCharacters(), who.graphic)<br/>
Since this change introduces new instructions, you **MUST** recompile all your scripts!</change>
</entry>
<entry>
<date>03-07-2021</date>
<author>Nando:</author>
<change type="Added">RefreshDecayAfterBoatMoves in servspecopt.cfg. Defaults to true to maintain the old behavior. If this setting is true,<br/>
the items on deck will be refreshed after each movement or turn. You might want to disable this to implement item decay<br/>
on boats. Note that POL doesn't yet handle item decay on boats.</change>
<change type="Fixed">HSA boat movement packets (0xF7 and 0xF6) will no longer overflow when too many items are on deck. Note that the packet<br/>
will be truncated and might be misinterpreted by the client or leave ghost items behind.</change>
</entry>
<entry>
<date>03-05-2021</date>
<author>Kevin:</author>
<change type="Removed">The ability to generate the Escript wordlist via the -W argument to ecompile.exe has been removed. The Escript grammar can be<br/>
described by the ANTLR .g4 files in the repository.</change>
</entry>
<entry>
<date>03-04-2021</date>
<author>Kevin:</author>
<change type="Removed">The old compiler has been removed from ecompile in favor of the ANTLR-driven 2020 compiler. This removes the ecompile.cfg<br/>
setting UseCompiler2020 as well as the ecompile.exe switches -g and -G. Any value of UseCompiler2020 in ecompile.cfg will be<br/>
ignored without warning.</change>
</entry>
</version>
<version name="POL100.0.0">
<entry>
<date>02-28-2021</date>
<author>Nando:</author>
<change type="Note">POL 100.0.0 is now officially released. This release marks the beginning of more frequent, rolling releases.<br/>
The next release will remove support for the old compiler. This is the *last chance* to test<br/>
if your scripts change when compiled with the new compiler. (See entry on 09-15-2020)</change>
</entry>
<entry>
<date>02-27-2021</date>
<author>Nando:</author>
<change type="Added">Parameter "evmask" to EnableEvents(ev, range := -1, evmask := EVMASK_ALL).<br/>
The allowed values are EVMASK_ONLY_PC, EVMASK_ONLY_NPC, or EVMASK_ALL.<br/>
When set, an NPC or Item will only receive entered/leftarea events caused by a PC, NPC or all mobiles (the default behavior).<br/>
This parameter is useful, for example, to decrease the load when there are too many NPCs in the same area.</change>
<change type="Added">Default mimetypes for .png, .js and .ico in the internal webserver</change>
<change type="Added">Allow URLs/filenames with a hyphen (-) in the internal webserver</change>
<change type="Fixed">Crash in SendPacket(), packet.SendPacket() and DisconnectClient() when the client was not yet logged in. Mostly affects packet hooks.</change>
</entry>
<entry>
<date>02-27-2021</date>
<author>Turley, Kevin:</author>
<change type="Added">os::GetEnvironmentVariable(name:="")<br/>
Returns String value of given environment variable name. If name is empty, returns Dictionary of all allowed environment variables.<br/>
The pol.cfg setting AllowedEnvironmentVariablesAccess controls script access to this function. See documentation for more details.</change>
</entry>
<entry>
<date>02-22-2021</date>
<author>Kevin:</author>
<change type="Fixed">Various compilation issues when using "\\" in scripts.</change>
<change type="Fixed">Passing a string for the skill to CheckSkill() now correctly uses the mobile's skill.</change>
</entry>
<entry>
<date>12-17-2020</date>
<author>Turley:</author>
<change type="Added">AppendConfigFileElem now checks if the file could be opened, returns an error if this fails.</change>
</entry>
<entry>
<date>12-09-2020</date>
<author>Turley:</author>
<change type="Added">os::LoadExportedScript(scriptname, args:={})<br/>
Load and start program part of given script.<br/>
The optional args array will be unpacked and passed as single arguments to the program.<br/>
Script will be started non-critical or critical depending on the caller's state.<br/>
Blocks until the program part ends.<br/>
Returns array{ExportScript, return value} return value is the return value of the program or 1 if nothing was returned.</change>
<change type="Added">ExportScript object<br/>
the script will remain loaded as long as the object exists.</change>
<change type="member">.exported_functions array of exported function names<br/>
method .call(functionname, args:={})<br/>
Calls and blocks current script a exported function and returns the return value or 1 if no return value was given.<br/>
Like LoadExportedScript critical state depends on the caller's script.<br/>
Args see LoadExportedScript.</change>
<change type="Added">packageref.dir member returns directory path<br/>
packageref.desc member returns description "pkg.name (pkg.dir)"</change>
<change type="Changed">added optional parameter for syslog "log_verbose" if set to 0 only the text will be logged and printed, not the scriptname.</change>
</entry>
<entry>
<date>10-25-2020</date>
<author>Turley:</author>
<change type="Changed">updated StrFormatTime to allow all format specifiers see http://www.cppreference.com/stddate/strftime.html for full list.<br/>
Removed restriction of 100 characters.</change>
</entry>
<entry>
<date>10-20-2020</date>
<author>Syzygy:</author>
<change type="Changed">It is now a syntax error to have a string literal that spans multiple lines.<br/>
If you have code like this:<br/>
var a := "first line<br/>
second line";<br/>
change it to something like this (adjust padding as needed):<br/>
var a := "first line\n"<br/>
+ " second line";</change>
</entry>
<entry>
<date>10-17-2020</date>
<author>Syzygy:</author>
<change type="Changed">Now using semantic versions for core versions.<br/>
polcore().version now returns a string like 100.0.0 rather than an integer like 100</change>
</entry>
<entry>
<date>09-15-2020</date>
<author>Syzygy:</author>
<change type="Changed">Replaced the eScript compiler. (Added the new compiler, which is used by default)<br/>
The intent is that the new compiler will compile every script that used to compile,<br/>
and will compile to identical instructions in the .ecl files.<br/>
There are a few cases where the old compiler (or "OG compiler") and the new compiler differ:<br/>
- Functions that are included but not referenced now have to have valid syntax.<br/>
- It is now an error for a "case" statement to specify the same value more than once when selecting which block to execute.<br/>
- Some operator precedence levels have changed:<br/>
- postfix operators: now have highest precedence.<br/>
- bit shift, bitwise or, bitwise and: now have the same precedence as multiplication<br/>
- bitwise or, bitwise xor: now have the same precedence as addition<br/>
- "in": now has higher precedence than the comparison (< <= >= >) operators<br/>
- elvis: now has precedence just below addition, and above "in", and above comparison<br/>
- As an example, this means "x & 0xFF == y & 0xFF" no longer needs parentheses to mean "(x & 0xff) == (y & 0xFF)"<br/>
- All operator precedence levels are here: https://github.com/polserver/polserver/blob/master/lib/EscriptGrammar/EscriptParser.g4#L252<br/>
- The ordering of module function declarations (from .em files) and user function definitions:<br/>
- the OG compiler orders these in order of use<br/>
- the new compiler orders them alphabetically<br/>
- On 64-bit windows, the old compiler generates the wrong constant (-1) for hex values with the high bit set.<br/>
- Example: const EVENT_PEACEMADE := 0x90000000;<br/>
In order to ensure that the behavior of your scripts does not change, please perform the following steps:<br/>
- Run "ecompile -f -a -s -l -G" to run both compilers in "comparison mode" against all of your scripts.<br/>
- Fix any syntax errors.<br/>
- Remove duplicate "case" statement dispatch selector values.<br/>
- Add parentheses as needed to account for operator precedence.<br/>
- Repeat until both compilers produce the same output.<br/>
Here are some examples of changes that I had to make:<br/>
- https://github.com/polserver/ModernDistro/pull/28/files<br/>
- https://github.com/polserver/ModernDistro/pull/36/files<br/>
- https://github.com/polserver/ClassicDistro/pull/6/files<br/>
The OG compiler is still available. I'll remove it in a later version. If needed, you can use it by doing either of the following:<br/>
- pass "-g-" to ecompile<br/>
- set "UseCompiler2020 0" in ecompile.cfg<br/>
New ecompile.cfg options:<br/>
EmParseTreeCacheSize (default 25): The number of .em files to cache. This value is intended to be high enough to cache every .em file.<br/>
IncParseTreeCacheSize (default 50): The number of .inc files to cache. You might see a tiny speed boost by increasing this.<br/>
UseCompiler2020 (default 1): Whether or not to use the new compiler.</change>
</entry>
<entry>
<date>08-27-2020</date>
<author>Nando:</author>
<change type="Changed">If "ShowGumpWarnings" in pol.cfg is disabled, it will also disable warnings about<br/>
overflow in the gump responses (B1 packet). Those messages may indicates the use of macro<br/>
tools or custom clients.</change>
</entry>
<entry>
<date>08-18-2020</date>
<author>Nando:</author>
<change type="Added">Parameter "max_cmdlevel" to polsys::ListTextCommands(). Indicates the maximum cmdlevel to include in the list.</change>
</entry>
<entry>
<date>08-13-2020</date>
<author>Nando:</author>
<change type="Changed">item.hitscript and item.onhitscript now always return the full path to the script (":pkgname:scriptname").<br/>
Before, if the item was defined on the same package as the script, only "scriptname" was returned.<br/>
POTENTIAL BREAKING CHANGE!</change>
</entry>
<entry>
<date>08-09-2020</date>
<author>Turley:</author>
<change type="Added">new argument "outdir" for uoconvert tiles/landtiles/multis this allows to define a different directory then the current workdirectory for the produced cfgs</change>
</entry>
<entry>
<date>08-04-2020</date>
<author>AsYlum:</author>
<change type="Added">polcore().last_character_serial returns last character serial assigned by core<br/>
polcore().last_item_serial returns last item serial assigned by core</change>
</entry>
<entry>
<date>08-03-2020</date>
<author>Kevin:</author>
<change type="Added">Optional parameter exit_code to uo::Shutdown() to change the pol process' exit code.</change>
</entry>
<entry>
<date>08-03-2020</date>
<author>Syzygy:</author>
<change type="Added">ecompile.cfg "VerbosityLevel" option (setting this is equivalent to ecompile -vN)</change>
</entry>
<entry>
<date>08-01-2020</date>
<author>Turley:</author>
<change type="Added">attribute.em CheckSkill() accepts now also the attribute name instead of the skill id.</change>
</entry>
<entry>
<date>07-31-2020</date>
<author>Nando:</author>
<change type="Fixed">Quality of any item can now be directly assigned from an ItemDescriptor. Before this only worked for Equipment (Armor & Weapons).</change>
<change type="Fixed">Stackable items with different values of 'quality' will no longer stack.</change>
</entry>
<entry>
<date>07-28-2020</date>
<author>Kevin:</author>
<change type="Fixed">Multiple scripts should not be allowed to call uo::SendTextEntryGump on the same character.</change>
</entry>
<entry>
<date>07-16-2020</date>
<author>DevGIB:</author>
<change type="Added">SwingSpeedIncrease(swing_speed_increase) and SwingSpeedIncreaseMod(swing_speed_increase_mod) to Mobiles and Items allowing people to have a dynamic modifier to the calculated swing speed.<br/>
Swing Speed Increase is used as a % modifier to the calculated speed of a weapon, e.g. Weapon speed of 30 * swing speed increase of 100% would make the swing speed 60.</change>
</entry>
<entry>
<date>06-14-2020</date>
<author>Syzygy:</author>
<change type="Fixed">A compiler optimization bug that could corrupt emitted instructions<br/>
if branches of an if statement were optimized out.</change>
</entry>
<entry>
<date>06-10-2020</date>
<author>Syzygy:</author>
<change type="Changed">It is now a compile error if a script requires a terminator (semicolon, etc)<br/>
at its end-of-file. This fixes bug009 in the escript test suite.</change>
</entry>
<entry>
<date>05-07-2020</date>
<author>Syzygy:</author>
<change type="Changed">Removed the "declare" keyword, which used to forward-declare functions.<br/>
It's unlikely that anything still uses this keyword after 17 years, but if<br/>
any of your scripts still forward-declare functions this way,<br/>
just delete the line.</change>
</entry>
<entry>
<date>04-28-2020</date>
<author>Syzygy:</author>
<change type="Added">Elvis operator: short-circuit binary operator EXPR_LHS ?: EXPR_RHS<br/>
This operator evaluates the left-hand-side operand and keeps its value if it is a true value.<br/>
Otherwise, evaluates the right-hand side operand and uses its value instead.<br/>
This is a short-circuit operator: if EXPR_LHS is true, the code for EXPR_RHS won't be executed.<br/>
These can also be changed: A ?: B ?: C ?: D evaluates to the first true value from left to right.<br/>
It has lower precedence than the binary additive operators (+ -), and higher precedence than the binary comparison operators (> >= < <=).<br/>
These are equivalent with or without parenthesis:<br/>
a ?: b + c a ?: ( b + c ) // lower precedence than addition<br/>
a ?: b <= c (a ?: b) <= c // higher precedence than comparison<br/>
See also https://en.wikipedia.org/wiki/Elvis_operator<br/>
For example, you could change this:<br/>
var difficulty;<br/>
if(targetsquare.objtype)<br/>
difficulty := GetHarvestDifficulty("fish", targetsquare.x, targetsquare.y, targetsquare.objtype, who.realm);<br/>
else<br/>
difficulty := GetHarvestDifficulty("fish", targetsquare.x, targetsquare.y, locinfo.landtile, who.realm);<br/>
endif<br/>
to this:<br/>
var difficulty := GetHarvestDifficulty("fish",<br/>
targetsquare.x, targetsquare.y,<br/>
targetsquare.objtype ?: locinfo.landtile,<br/>
who.realm);</change>
</entry>
<entry>
<date>04-18-2020</date>
<author>DevGIB:</author>
<change type="Added">ShowWarningCursorSequence to pol.cfg to silence "cursor out of sequence" errors.</change>
</entry>
<entry>
<date>03-19-2020</date>
<author>Kevin:</author>
<change type="Added">New Server Specific Option (servspecopt.cfg) EnableWorldMapPackets. If enabled, the server will respond to client<br/>
requests for guild and party member locations. This option is disabled by default.</change>
</entry>
<entry>
<date>02-05-2020</date>
<author>Kevin:</author>
<change type="Added">New SCRIPTOPT_SURVIVE_ATTACHED_DISCONNECT will keep attached scripts (eg. skill scripts, item use scripts) alive if the<br/>
character's client disconnects. Note that by default all references to the character will become invalidated; for example,<br/>
GetObjProperty(chr, "prop") will return an error. Enable SCRIPTOPT_CAN_ACCESS_OFFLINE_MOBILES to bypass this.</change>
<change type="Fixed">Scripts that have Set_Script_Option(SCRIPTOPT_CAN_ACCESS_OFFLINE_MOBILES) can correctly access offline mobiles.</change>
</entry>
<entry>
<date>01-20-2020</date>
<author>Kevin:</author>
<change type="Fixed">Huge Performance loss in Lower/Upper String functions.</change>
</entry>
<entry>
<date>01-18-2020</date>
<author>DevGIB:</author>
<change type="Changed">Return type of XMLFile method .appendxmlnode() now returns the created node on success.</change>
<change type="Changed">Return type of XMLNode method .appendxmlnode() now returns the created node on success.</change>
<change type="Changed">Return type of XMLNode methods .setxmlattribute() and .removexmlattribute() now returns parent node on success.</change>
</entry>
<entry>
<date>01-12-2020</date>
<author>Kevin:</author>
<change type="Changed">On Windows, the pol.cfg setting UoDataFileRoot will now default to the directory of the Ultima Online installation found in<br/>
the Windows Registry. This setting MUST be set for servers that do not have Ultima Online installed through the operating<br/>
system, and MAY be set to use custom a client data files directory.</change>
</entry>
<entry>
<date>01-04-2020</date>
<author>Turley:</author>
<change type="Fixed">Tabulator and newline chars where disallowed in CChr and the sanitize step of strings. (introduced with unicode support)</change>
</entry>
<entry>
<date>01-03-2020</date>
<author>DevGIB:</author>
<change type="Changed">POTENTIAL BREAKING CHANGE! Updated AddAmount() function to return the item reference on success instead of 1.<br/>
You'll need to check your scripts for AddAmount and make sure its not evaluated against 1 for success.</change>
</entry>
<entry>
<date>12-29-2019</date>
<author>Kevin:</author>
<change type="Added">Added definitions for packets 0xFA (Open UO Store) and 0xFB (Update View Public House Contents).</change>
</entry>
<entry>
<date>12-28-2019</date>
<author>Turley:</author>
<change type="Changed">house.house_parts member returns now when in edit mode the current (possible not yet confirmed)<br/>
list of parts instead of an error.</change>
<change type="Changed">misc/customhousecommit.src no more has a third parameter elements.<br/>
Before this parameter was the only option to get the current working list,<br/>
but since the client is able to modify the house further especially when the script shows a confirm dialog the given list is outdated.<br/>
Its highly recommended in case of an confirm dialog to calculate the price again after gump confirmation!</change>
<change type="Changed">syshook CloseCustomHouse now gets also called when client disconnects</change>
<change type="Fixed">Several other bugs with custom houses<br/>
Thx Pumpkins!</change>
</entry>
<entry>
<date>12-28-2019</date>
<author>DevGIB:</author>
<change type="Fixed">CustomHouses when no backup existed the foundation vanished on pressing revert.</change>
</entry>
<entry>
<date>12-12-2019</date>
<author>Turley:</author>
<change type="Fixed">Poison/invul status for newer clients, when mobile didnt move</change>
</entry>
<entry>
<date>10-05-2019</date>
<author>Turley:</author>
<change type="Changed">ECompile reports warnings and errors to cerr instead of printing everything to cout.<br/>
Exit code of ECompile is 1 when at least one file fails to compile.</change>
<change type="Added">ecompile.cfg ErrorOnFileCaseMissmatch (default 0)<br/>
commandline flag -c<br/>
Leads to a compilation error if the capitalization of the include directive does not match the filename.<br/>
This has only a meaning on windows.<br/>
The existing warning is now an official warning meaning that the error on warning flag leads also to an abort.</change>
<change type="Added">pre/post increment/decrement unary operator (++i, i++, --i, i--) for integer and doubles.<br/>
++i is the same as writing i+=1 or i:=i+1<br/>
i++ returns the old value, thus its equal to j:=i; i+=1;<br/>
Since it is an unary operator it can be directly used as function parameter or eg while loops.<br/>
Instead of writing<br/>
while (i<5)<br/>
i+=1;<br/>
...<br/>
you can directly write<br/>
while (++i<5)<br/>
...</change>
<change type="Note">The operators are only implemented for numbers but this includes also eg. arrays or members when it represents a number. So ++a[1], ++who.fire_resist_mod are also valid.<br/>
Performance wise is i:=i+1 the slowest then i+=1 then i++ then ++i. (i++ is slower since it returns the old value).</change>
</entry>
<entry>
<date>10-03-2019</date>
<author>Turley:</author>
<change type="Fixed">min/max damage visualization in the statbar are now cropped between 0 and 65k like damage calculation.</change>
</entry>
<entry>
<date>09-30-2019</date>
<author>Nando:</author>
<change type="Changed">Changed default of GetProcess(pid) from 0 to -1 due to compatibility issues with scripts using CInt()'s result directly.<br/>
PIDs are now enforced to never represent negative numbers. Please update your os.em and recompile your scripts.</change>
</entry>
<entry>
<date>09-26-2019</date>
<author>DevGIB:</author>
<change type="Added">Script objects now have package member which returns a PackageRef. e.g. script.package.name = "GuildStone".</change>
</entry>
<entry>
<date>09-21-2019</date>
<author>Turley:</author>
<change type="Changed">The core is now Unicode aware!<br/>
A normal String object can hold unicode.<br/>
Files can now be stored in utf8 with or without BOM.<br/>
For backward compatibility if invalid unicode is detected while compiling/file reading ISO8859 will be assumed.<br/>
CAsc and CAscZ are normally no more needed, most incompatible changes are due to the fact that the old unicode array used for uctext is now replaced by an normal string object.</change>
<change type="Changed">The following incompatible changes where made:<br/>
party.cfg<br/>
OnPublicChat second parameter is now a string object<br/>
OnPrivateChat third parameter is now a string object<br/>
ChangePublicChat second parameter is now a string object<br/>
ChangePrivateChat third parameter is now a string object<br/>
unicode.em<br/>
RequestInputUC return value no more contains member uc_text<br/>
CharRef.clientinfo struct return value member video_description and langcode is now a string<br/>
PacketObj.getunicodestring()/getunicodestringflipped() return a string<br/>
TextCmd arguments are now (CharRef, String, [langcode=String])<br/>
SpeechEvent no more contains uc_text member<br/>
scripts/misc/charprofile.ecl fourth parameter is a string</change>
<change type="Changed">all places which currently accept an UnicodeArray can now also receive a String (UnicodeArray just for backward compatibility)<br/>
cliloc.em SendSysMessageCL, PrintTextAboveCL, PrintTextAbovePrivateCL<br/>
npc.em SayUC<br/>
party.em SendPartyMsg, SendPrivatePartyMsg<br/>
unicode.em BroadcastUC, PrintTextAbovePrivateUC, PrintTextAboveUC, RequestInputUC, SendSysMessageUC<br/>
uo.em SendCharProfile<br/>
PacketObj.setunicodestring()/setunicodestringflipped()<br/>
CharRef.addbuff()</change>
<change type="Note">Item/Mobile names need still to be in ASCII format.</change>
<change type="Note">In the case of an unicode string as parameter for the following functions the unicode replacement will be automatically used, with ENU as langcode:<br/>
Broadcast -> BroadcastUC<br/>
PrintTextAbovePrivate -> PrintTextAbovePrivateUC<br/>
PrintTextAbove -> PrintTextAboveUC<br/>
RequestInput -> RequestInputUC<br/>
Say -> SayUC<br/>
SendSysMessage -> SendSysMessageUC</change>
</entry>
<entry>
<date>08-26-2019</date>
<author>Nando:</author>
<change type="Changed">Improved how the debug, www and aux servers handle connections. They should be faster and more stable now. Minor issues fixed.</change>
</entry>
<entry>
<date>08-21-2019</date>
<author>DevGIB:</author>
<change type="Fixed">Missing default on GetProcess( pid ), this is now GetProcess( pid:= 0 ) to align with docs and functionallity. Please update your os.em file and recompile.</change>
</entry>
<entry>
<date>07-12-2019</date>
<author>DevGIB:</author>
<change type="Fixed">Initalization error with the new AOS props causing items with no props set to inject random numbers on server boot.</change>
<change type="Changed">Fixed issue with moving a character to a shadow realm within the same screen, the core would not correctly send mobile serials to the characters client on relocation and you would still see inaccessible characters in the shadow realm.</change>
<change type="Changed">Fixed some incorrect dates on the change log.</change>
</entry>
<entry>
<date>06-18-2019</date>
<author>DevGIB:</author>
<change type="Changed">Fixed SendQuestArrow() function to use arrow id's rather than an actual object reference. This allows for multiple arrows to be sent to the client and cancelled individually by storing them in a cprop to be recalled later.<br/>
When sending SendQuestArrow() the function will return the arrows id for further processing.</change>
</entry>
<entry>
<date>06-17-2019</date>
<author>DevGIB:</author>
<change type="Changed">Fixed default for OS::Start_Skill_Script on script_name attribute to be string like required.</change>
</entry>
<entry>
<date>06-17-2019</date>
<author>DevGIB:</author>
<change type="Added">Support for LowerReagentCost, SpellDamageIncrease, FasterCasting, FasterCastRecovery, DefenceIncrease, DefenceIncreaseCap, LowerManaCost, Hitchance,<br/>
Luck, FireResistCap, ColdResistCap, EnergyResistCap, PhysicalResistCap, and PoisonResistCap and their subsequent mods to UObject as dynaprops.</change>
<change type="Changed">Elevated Luck to UObject and added related LuckMod.</change>
<change type="Added">Support for new prop changes to the status bar packet.</change>
<change type="Added">Resistances will now be limited to caps by core, unless caps aren't set or are 0.</change>
<change type="Added">CoreIgnoresDefenceCaps to servspecopt.cfg which defaults to 0. If set to 1 core will not calculate resistances and defence increase limits set on the mobile.</change>
</entry>
<entry>
<date>04-26-2019</date>
<author>Nando:</author>
<change type="Changed">Improved connection handling. Linux won't be limited to 1024 clients anymore, recent Windows shouldn't be affected besides some slight performance gain.</change>
<change type="Note">POL now requires at least Windows Vista / Server 2008. Let us know if Windows XP was important to you.</change>
<change type="Removed">pol.cfg option "ListenPort". It was deprecated since 2012 (and likely didn't work). You should use a Listener in uoclient.cfg.</change>
<change type="Removed">pol.cfg option "Multithread". It was deprecated since 2016 and unstable. Also removed the method OS::System_RPM(), which was only useful for singlethreaded POL.</change>
</entry>
<entry>
<date>04-26-2019</date>
<author>Turley:</author>
<change type="Added">pol.cfg setting "LoginServerTimeout". Defines a timeout for new connections to the loginserver.<br/>
Defaults to 10 minutes, should give enough time to select a character.</change>
</entry>
<entry>
<date>03-19-2019</date>
<author>Kevin:</author>
<change type="Changed">attributes::GetAttribute now accepts an optional parameter to specify the precision of the attribute<br/>
value returned. Use ATTRIBUTE_PRECISION_NORMAL (default) to use the existing precision, or<br/>
ATTRIBUTE_PRECISION_TENTHS to get the value in tenths.<br/>
Since this is a change to the module function's number of arguments, you MUST recompile your scripts.</change>
</entry>
<entry>
<date>03-08-2019</date>
<author>Yukiko:</author>
<change type="Changed">pol.cfg settings HideWarningGump and HideWarningItem to ShowWarningGump and ShowWarningItem.<br/>
This positive logic is consistent with all other console output settings.<br/>
Default setting is one (1). The output be displayed by default. Set to zero (0) to suppress.</change>
</entry>
<entry>
<date>02-18-2019</date>
<author>Skinny:</author>
<change type="Added">pol.cfg HideWarningGump and HideWarningItem.<br/>
Many players macros generate warnings messages on the console, causing flooding, especially if you have lots of players online.<br/>
You can enable setting HideWarningGump=1 and HideWarningItem=1 in the pol.cfg. Default value is 0.</change>
</entry>
<entry>
<date>02-02-2019</date>
<author>Yukiko:</author>
<change type="Added">uoconvert.exe will now surface the AnimID for equippables to tiles.cfg. This can be used to look-up the gump pic for wearables that are displayed on the paper doll. Add this number to 50000 for male gumpart or 60000 for female gump art. The resulting number will be the gump art that is displayed in the paper doll.</change>
</entry>
<entry>
<date>01-21-2019</date>
<author>Nando:</author>
<change type="Changed">account.split() will now return an AccountRef to the new account instead of "true".</change>
</entry>
<entry>
<date>01-17-2019</date>
<author>Kevin:</author>
<change type="Fixed">Vendor purchases could overflow</change>
</entry>
<entry>
<date>01-01-2019</date>
<author>Turley:</author>
<change type="Changed">DepletedFunction hook now receives a second parameter: reason<br/>
The values are:<br/>
0: Regenerate, 1: Damage, 2: Movement, 3: Death, 4: Resurrect, 5: Script</change>
</entry>
<entry>
<date>12-30-2018</date>
<author>Turley:</author>
<change type="Added">vitals.cfg optional entry DepletedFunction<br/>
gets called once the vital reaches 0.<br/>
Given Argument is character reference<br/>
Like the other entries the syntax is ScriptName:ExportedFunctionName</change>
</entry>
<entry>
<date>12-21-2018</date>
<author>Turley:</author>
<change type="Fixed">CPU usage of UseSingleThreadLogin</change>
</entry>
<entry>
<date>11-27-2018</date>
<author>Nando:</author>
<change type="Added">Top-level items can now receive ENTEREDAREA and LEFTAREA events.</change>
</entry>
<entry>
<date>11-25-2018</date>
<author>Yukiko:</author>
<change type="Changed">The order of a couple of functions listed in uo.em. They were out of alphabetical order.</change>
<change type="Added">To uo.em ListItemsInBoxOfObjType( objtype, x1, y1, z1, x2, y2, z2, realm := _DEFAULT_REALM)<br/>
The function returns an array of all items in the bounds of the coordinates matching the ObjType specified.</change>
<change type="Added">To uo.em ListObjectsInBoxOfClass( POL_Class, x1, y1, z1, x2, y2, z2, realm := _DEFAULT_REALM)<br/>
The function returns an array of all items in the bounds of the coordinates matching the POL_Class specified.</change>
</entry>
<entry>
<date>10-22-2018</date>
<author>Turley:</author>
<change type="Fixed">Undefined behaviour after ~20 days due to overflow in time measurment. This fixes both internal time measurments e.g. for repeating tasks, swing,.. and for the EScript function ReadMilliSecondClock() see below.</change>
<change type="Changed">ReadMillisecondClock() returns now a double instead of an integer to allow higher uptimes.</change>
</entry>
<entry>
<date>10-13-2018</date>
<author>Turley:</author>
<change type="Added">syshook.cfg SystemMethod for defining object class method scripts.<br/>
Like itemdesc method scripts overriding builtin methods is possible, the builtin method can be called when prefixing with _.<br/>
For UObject classes like shown in the objref docs the inheritance is respected<br/>
so methods defined for items will be usable in weapons and methods defined in equipment override uobject methods.<br/>
Valid cfg keys are:<br/>
uobject, item, equipment, lockable, map, multi, armor, weapon, door, container, boat,<br/>
house, spellbook, corpse, npc, character, client, account, party, guild<br/>
Itemdesc/Npctemplate specific method scripts will still be first checked.</change>
<change type="Note">uoclient.cfg MethodScript entry is deprecated</change>
</entry>
<entry>
<date>10-12-2018</date>
<author>DevGIB:</author>
<change type="Changed">Added -1 as acceptable return from ConsumeAmmunition hook which will make the core continue with the normal ammunition checks.</change>
</entry>
<entry>
<date>10-07-2018</date>
<author>Turley:</author>
<change type="Added">array.sorted_insert(obj, sub_index:=0, reverse:=0)<br/>
assumes an already sorted array and inserts given obj. sub_index and reverse parameter have to match the sorting criteria of the array.</change>
</entry>
<entry>
<date>10-06-2018</date>
<author>DevGIB:</author>
<change type="Added">ConsumeAmmunition syshook to hook the cores check for ammunition consumption during combat. Hook should return 1 if combat is to go ahead and 0 if the weapon should not fire.</change>
</entry>
<entry>
<date>09-07-2018</date>
<author>DevGIB:</author>
<change type="Changed">FindObjtypeInContainer(container, objtype, flags :=0 ) to recurse all containers from base container.</change>
<change type="Added">Constants FINDOBJTYPE_RECURSIVE, FINDOBJTYPE_IGNORE_LOCKED and FINDOBJTYPE_ROOT_ONLY to UO.EM</change>
<change type="Added">Flags to FindObjtypeInContainer() for only accessing root container, and bypassing locked container checks.</change>
<change type="Note">THESE CHANGES TO FindObjtypeInContainer() WILL EFFECTIVELY CHANGE THE DEFAULT FUNCTIONALITY OF THE FUNCTION AS DEFAULT IS NOW TO RECURSE SUB CONTAINERS.</change>
<change type="Added">Additional documentation to the Racalac escript guide to include additional information supplied by Yukiko.</change>
</entry>
<entry>
<date>07-27-2018</date>
<author>DevGIB:</author>
<change type="Added">ListStaticsNearLocationOfType( x, y, z, range, objtype, flags := 0, realm := _DEFAULT_REALM ) to get a struct of statics near a location which match an objtype.</change>
<change type="Added">ListStaticsNearLocationWithFlag( x, y, z, range, flags, realm := _DEFAULT_REALM ) to get a struct of statics near a location which have matching flags in the tiledata.</change>
</entry>
<entry>
<date>07-29-2018</date>
<author>Turley:</author>
<change type="Added">ecompile.cfg NumberOfThreads<br/>
forces N number of threads to be used for compilation, default is 0 which like before autodetects the number.<br/>
cmd param -T can now be optionally extended with a number to override the cfg setting</change>
</entry>
<entry>
<date>07-19-2018</date>
<author>DevGIB:</author>
<change type="Added">EncodeBase64(String) and DecodeBase64(String) to basic.em to enable people to encode and decode strings using base64 without requiring an escript function.</change>
</entry>
<entry>
<date>04-02-2018</date>
<author>Bodom:</author>
<change type="Removed">polcore().compiledate and polcore().compiletime</change>
<change type="Added">polcore().compiledatetime</change>
</entry>
<entry>
<date>03-19-2018</date>
<author>Nando:</author>
<change type="Fixed">Crash at shutdown when POL hasn't been correctly started.</change>
</entry>
<entry>
<date>02-26-2018</date>
<author>Nando:</author>
<change type="Added">uoconvert now supports UOP files and will use them by default. If there is no<br/>
map[N]LegacyMUL.uop in the UODataFileRoot, uoconvert will fall back to the<br/>
old map[N].mul files. You can force uoconvert to convert from the old MULs by using<br/>
readuop=0.</change>
</entry>
<entry>
<date>02-10-2018</date>
<author>Nando:</author>
<change type="Changed">POL099 is officially released after almost 10 years. Starting the work on POL100.</change>
</entry>
</version>
<version name="POL099.1">
<entry>
<date>02-11-2018</date>
<author>Nando:</author>
<change type="Added">range parameter to Accessible(chr, item, range := ACCESSIBLE_DEFAULT).<br/>
Valid values: range >= 0, range == ACCESSIBLE_DEFAULT or range == ACCESSIBLE_IGNOREDISTANCE.<br/>
The default range will be defined as the servspecopt entry "DefaultAccessibleRange". If that<br/>
entry doesn't exist, the "DefaultDoubleclickRange" will be used instead (which defaults to 2).</change>
<change type="Fixed">Accessible(chr, item) now checks for the distance to the item. Differently from the distance<br/>
of 2 tiles the docs stated, the allowed distance before was about 18 tiles. To recover the old behavior,<br/>
use ACCESSIBLE_IGNOREDISTANCE as range.</change>
</entry>
</version>
<version name="POL099">
<entry>
<date>02-06-2018</date>
<author>Turley:</author>
<change type="Fixed">fileaccess.cfg: Not specifying Directory entry behaves like before and gives access to all directories. (broken since 01-05-2018)</change>
</entry>
<entry>
<date>02-05-2018</date>
<author>Turley:</author>
<change type="Added">Operator @<br/>
used to receive a function object, which can later be used to call the underlying function with the same parameters/return value via the method ".call(..)"</change>
<change type="Note">This object can only executed in the same script instance where it was created and cannot be saved/loaded from datafiles/cprops.</change>
<change type="Note">Use cases:<br/>
function genericItemLoop(func)<br/>