-
Notifications
You must be signed in to change notification settings - Fork 25
/
Changelog.txt
12909 lines (10939 loc) · 722 KB
/
Changelog.txt
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
30/03/2024 - Dragon Slayer/Xuri
Fixed a bug where crafted items were not selling properly. Now, players can successfully sell their crafted gear at vendors.
22/03/2024 - Dragon Slayer/Xuri
Leading/trailing whitespace is now trimmed from account names during login.
21/03/2024 - Dragon Slayer/Xuri
Fixed an issue with onHunger and onThirst event crashing if the npc was not loaded yet.
18/02/2024 - Dragon Slayer/Xuri
Updated set and get commands (set.js, get.js) with additional ways to set/get resistance types on objects using the syntax 'set/set [type] #. Available resistance types:
resistarmor, resistlight, resistwater, resistcold, resistfire, resistenergy, resistpoison
20/12/2023 - Dragon Slayer
Added Elixiers of Ingot Conversions (js ElixierOfIngots)
19/12/2023 - Dragon Slayer
Added Powder of translocation. (js powderoftranslocation)
17/12/2023 - Dragon Slayer
Added OnContextMenuRequest and OnContextMenuSelect. (Thanks Xuri)
16/12/2023 - Dragon Slayer
Added Crystal ball that says random msgs. (js crystalball)
Added Crystal Ball of Pet Summoning. (js ballofpetsummoning)
10/12/2023 - Dragon Slayer
Implemented Check_travel_restriction, Check_teleport, and Check_regeants in magic/helpers (js).
Added GetTownRegionXY (Thanks Xuri).
Enhanced Runebook functionality with triggerevent for the new js files.
Updated Moongate.js to incorporate the new check teleport logic.
Optimized clumsy.js to utilize the new reagents.js.
3/12/2023 - Dragon Slayer
Fixed Magic Weapons setting damage correctly when they are generated.(js Magic_Items)
30/11/2023 - Dragon Slayer
Added support for new DFN tag in spawn regions that allows defining one or more exclusion areas per spawn region to prevent spawning of objects within said regions:
EXCLUDEAREA=x1,y1,x2,y2 // Area within defined boundary will be excluded as valid spawn area (Special, Thanks to Xuri)
Added new UOX.INI setting to control for which facets public moongate travel is available (defaults to Felucca, Trammel and Ilshenar):
MOONGATEFACETS=# // # is a bitmask that determines which facets to allow public moongate travel to. Supported values:
0 = No facets enabled (default)
1 = Felucca
2 = Trammel
4 = Ilshenar
8 = Malas
16 = Tokuno
32 = Ter Mur
Examples: A value of 1 = only Felucca is enabled, value of 3 = Felucca + Trammel, 10 = Malas + Ilshenar, 63 = all facets enabled, etc.
Added new Admin commands to enable/disable public moongate travel in specific facets:
'enablemoongates <facetNum/facetName>
'disablemoongates <facetNum/facetName>
28/11/2023 - Dragon Slayer
Adjusted the Default values for MaxClientBytesIn and MaxClientBytesOut by double.
26/11/2023 - Dragon Slayer
Added Glassblowing Crafting System:
- Introducing a new crafting menu for glassblowing, allowing players to create unique glass items.
- New crafting tools, including a glassblowing pipe and glass items.
26/11/2023 - Dragon Slayer
Fixed a potential server crash issue related to keeping track of which players have opened which containers (Xuri)
Resolved an issue with validation in treasuredigging.js, thanks to the efforts of (Xuri)
Welcomed the addition of treasuredirt.js, featuring the exhilarating killtreasureevent functionality.
Enhanced the precision of the treasure dig timer, bringing it more in line with the standards of Uo Live Servers.
21/11/2023 - Danny S.
Renamed bod_rewards.dfn to bod_rewards_blacksmith.dfn.
Added bod_rewards_tailor.dfn with the following items:
clothing_bless_deed
base_runic_sewing_kit
spined_runic_sewing_kit*
horned_runic_sewing_kit*
barbed_runic_sewing_kit*
*Currently function as normal sewing kits
Added GOOD DFN tag to item JS Objects. (UOXJSPropertyFuncs.cpp)
Added script for handling clothing bless deed usage. (clothing_bless_deed.js)
Enabled clothing bless deeds and runic sewing kits as tailoring BOD rewards. (vendor_bdo_dispenser.js)
19/11/2023 - Dragon Slayer
Fixed an issue where players qualifying for instant logout would not immediately vanish from view upon logout (Xuri)
18/11/2023 - Xuri
Enhance the calculation of the average 'z' for movement.
15/11/2023 - Dragon Slayer
Added Christmas Items from differant years. (dfn christmas)
Added Christmas Npcs from differant years. (dfn christmascreatures)
Moved Halloween and christmas js files into a folder called holidays
Added Holiday Potted Plant Gump (js holidaypottedplant)
Updated Candy js file with new msgs and toothachs (js candy)
Added Addon Deed Gump js It will display a gump with the addon in it to place. (js addondeedgump)
Added ReDeed Addon Gump js for redeeding new addons VIA Gump. (js redeedaddon)
Added snowpile js Now you can smash your enemys face with snow. (js snowpile)
Updated axe.js with new redeed gump. (js axe)
Added Paralyzing Blow, Crushing Blow, and Concussion Blow. (js weapon_abilities)
14/11/2023 - Warden
Fixed crafting rank sytem modifiers.
Items crafted at Rank 1 will now have their stats multiplied by 60% of the DFN values for the following stats:
Damage (both Lo and Hi), Resist (Physical), HP (and MaxHP), Buy Value, Max Uses
For each rank above 1, the stat multiplier is increased by 5%, meaning a Rank 10 crafted item will have 105% DFN value for the above stats
13/11/2023 - Warden
Fixed an issue in which the timer callback for spinning wool, flax, and thread lost context, causing the spinning wheel to spin endlessly.
13/11/2023 - Dragon Slayer
Added treasure hunting system; NPCs can now drop level 1-5 treasure maps which players can decode and dig up for epic loot.
11/11/2023 - Danny S.
Implemented tailoring BODs.
Blacksmiths, armorers, weaponsmiths, and ironworkers have had their bodType custom tag value changed to 1. (malevendors.dfn, femalevendors.dfn)
Tailors are now associated to the vendor_bdo_dispenser.js script and have a bodType custom tag with a value of 2. (malevendors.dfn, femalevendors.dfn)
A new custom tag, bodSubtype, has been added with different values depending on the vendor DFN (malevendors.dfn, femalevendors.dfn):
Weaponsmith - 1
Armorer - 2
Blacksmith - 3
Ironworker - 3
Tailor - 1
The item DFN smallbod has been renamed to smallbod_blacksmith and it has a new bodType custom tag with a value of 1. (misc_deeds.dfn)
Added a new item DFN, smallbod_tailor, having a bodType custom tag with a value of 2. (misc_deeds.dfn)
The smallbod script has been updated to handle creation and initialization of either type of BOD. (smallbod.js)
The vendor BOD script has been updated to handle interactions for either type of BOD. (vendor_bdo_dispenser.js)
Fixed an issue making it impossible for BODs to require exceptional items. (vendor_bdo_dispenser.js)
Fixed an issue where the BOD reward dispensing cooldown timer was not actually being set. (vendor bdo_dispenser.js)
Fixed an issue where the vendor BOD script's onSpeech callback would trigger to completion for all BOD dispensing NPCs within the player's radius. (vendor_bdo_dispenser.js)
Removed AOS era BOD reward items, as the item DFNs do not yet exist. (vendor_bdo_dispenser.js)
Removed maximum reward penalty for small BODs, as large BODs do not yet exist. (vendor_bdo_dispenser.js)
10/11/2023 - Danny S.
Fixed an issue in the vendor BOD script that prevented vendors from accepting BODs. (vendor_bdo_dispenser.js)
Fixed an issue in the vendor BOD script that caused an error to be thrown when attempting to dispense a sturdy shovel reward. (vendor_bdo_dispenser.js)
Changed skill boosting equipment script to modify effective skills instead of base skills. (skill_boosting_equipment.js)
Fixed an issue in the BOD item GUMP that prevented adding multiple items in a row. (smallbod.js)
Changed the BOD item GUMP to no longer close in between clicking "Combine..." and targeting an item. (smallbod.js)
Changed the BOD item targeting cursor to automatically stop targeting after the BOD's item requirements are met. (smallbod.js)
Fixed an issue where an error would be thrown when clicking empty space with a BOD item targeting cursor. (smallbod.js)
10/11/2023 - Dragon Slayer
Added IDs for stocking items to cItem::GetPackType() in items.cpp, so they can be used as containers
09/11/2023 - Dragon Slayer, Xuri
Fixed Smelting items with 0 hp (js blacksmithing)
Fixed Unraveling items with 0 hp (js tailoring)
Added Tongs, Scissors, Tinkering Tools to material types (js material_types)
Updated ApplyRank to set hp,maxhp and maxuses to 1. (cpp skills)
29/10/2023 - Dragon Slayer, Xuri
Added DFN entries for first aid belt. (dfn item/gear/clothing/ej_clothing)
Added First Aid Belt ID to backpack type. (cpp items)
Added bandage healing bonus to healing. (js healing)
Added JS script bandagehealingbonus (js items/equip_effect/bandagehealingbonus)
28/10/2023 - Dragon Slayer (0.99.6a)
Added DFN entries for hallow pumpkins, jack o lanterns and halloween decorations. (dfn item/misc/halloween)
Added DFN entrie for killerpumpkin in daemons.dfn. (dfn daemons)
Added JS script for pumpkins. (js items/pumpkins)
Added JS script for candy. (js items/candy)
Added JS script for jack o lanterns. (js items/jackolanterns)
Added JS script for head on spike. (js items/headonspike)
Added JS script for pumpkin carving kit. (js items/pumpkincarvingkit)
Updated JS script for lights.js with halloween pumpkins. (js lights)
Updated SCP jse_objectassociations.scp with pumpkin ids.
Fixed an issue in runebook.js missing function _restorecontext_ {}. (js runebook)
Fixed an issue in potion.js miss spelled server setting YoungPlayerStatus to YoungPlayerSystem. (js potion)
Updated Warning log for movement.cpp to include World Number and also changed it to read out like this NPC/Player. (cpp movement.cpp)
Move SetRandomName from Char to Base. (strattond/Maarc)
Add NAMELIST tag support for items. (strattond/Maarc)
Update JS function to allow SetRandomName for an item. (strattond/Maarc)
Updated DFN Addmenus with new Halloween items Under Misc/Holidays. (dfn itemmenu and itemmenu.bulk)
Added Halloween Event Decoration file. (jsdata event_halloween)
14/10/2023 - Xuri (0.99.6)
Updated version number :)
Fixed an issue where the "female" flag was not set correctly in CPExtMove() and CPDrawGamePlayer() packets for characters with female Gargoyle (or Savage) body IDs
14/10/2023 - Xuri (0.99.6-RC6x)
Added dummy context restore function to additional scripts
Updated 'go command to support specifying location to teleport to by name, mapped to locations from locations.dfn (Thanks Dragon Slayer!)
Updated Smart Turn script for furniture (js/server/misc/furniture_smartturn.js) with more optimized code (Humility)
Fixed latitude/longitude output of GetMapCoordinates helper function (js/server/data/map_coordinates.js), and updated scripts that relied on it
Fixed an issue where trying to craft fletching tools would produce hatchets instead (js/skill/craft/fletching.js)
Updated js/item/bankcheck.js to display value of checks using onTooltip JS Event, or onNameRequest JS Event if tooltips are disabled
Fixed a couple of DFN formatting issues (thanks, punt)
Fixed an issue where blank deeds (and bank checks) would be pileable if dropped on the same container (dfndata/items/tools/inscription.dfn)
Added dedicated [bankcheck] DFN item (dfndata/items/misc/money.dfn)
Updated Banker AI script (js/npc/ai/banker.js) to use dedicated [bankcheck] item instead of blank deeds as base for bank checks, and to have banker NPCs pause and turn towards player when talked to
Fixed an issue with script for Healing/Veterinary (js/skill/healing.js) which incorrectly used Anatomy as supplementary skill for Veterinary instead of Animal Lore, and which checked dex of wrong character when calculating healing slips
Added two missing tile flags to tileflag enum that threw order of such flags added with HS expansion out of order (thanks, punt)
Fixed an issue with travel-commands in GM menu which handled travelling between facets incorrectly
Added region spawners for dungeons, towns and overworld in Ilshenar facet
Enabled Trammel and Ilshenar facet decorations/spawns by default in admin welcome script (js/server/misc/admin_welcome.js)
Reworked portions of admin welcome gump to display optional "addon" decorations per facet, which might be client/era-specific (js/server/misc/admin_welcome.js)
Added new NPCs to dfndata/npc/femalehuman.dfn: f_executioner, f_chaosdragoon, f_chaosdragoonelite, f_gypsybanker
Added new NPCs to dfndata/npc/femalevendors.dfn: f_gypsymaiden, f_gypsyanimaltrainer, f_gypsyfortuneteller, f_vagabond, f_ironworker
Added new NPCs to dfndata/npc/malehuman.dfn: m_executioner, m_chaosdragoon, m_chaosdragoonelite, m_gypsybanker
Added new NPCs to dfndata/npc/malevendors.dfn: m_gypsyanimaltrainer, m_vagabond, m_ironworker
Added new NPC to dfndata/npc/miscmonsters.dfn: darkwisp
Added new NPC to dfndata/npc/undead.dfn: ancientlich
Added new Item DFNs for "camps" that when spawned will create a camp with specific decorations ([ilsh_orc_camp], [ilsh_healer_camp], [ilsh_mage_camp], [ilsh_banker_camp])
Added scripts for camps (js/item/camps/ilsh_banker_camp.js, js/item/camps/ilsh_healer_camp.js, js/item/camps/ilsh_mage_camp.js, js/item/camps/ilsh_orc_camp.js)
Added new colorlist to dfndata/colors/colors.dfn: [RANDOMCOLOR 33] (Bright Primary Colors)
Fixed an issue with gargish cloth chest DFN which prevented LBR version from working properly (dfndata/items/gear/armor/gargish_armor/gargish_cloth.dfn)
Added a bunch of new NPCLISTS in various npclist DFN files to support regional spawns in Ilshenar
Added missing BACKPACK tag to [golem] NPC DFN (dfndata/npc/clockwork.dfn)
Fixed misspelled section header for Fire Elemental NPC - from firele to fireele (dfndata/npc/elementals.dfn)
Murderous brigand NPCs are no longer willing to teach players skills (dfndata/npc/femalehuman.dfn, dfndata/npc/malehuman.dfn)
Corrected coordinates of Rock Dungeon region (dfndata/regions/regions.dfn)
Added regions for Sea Market (Felucca/Trammel), Blackthorn Dungeon (Felucca/Trammel) and Lakeshire (Ilshenar) (dfndata/regions/regions.dfn)
Fixed an issue with 'radditem and 'raddspawner GM commands which would not correctly set the Z of the added item/spawner to match target location (js/commands/custom/repeatingcmds.js)
Added two new repeating commands (js/commands/custom/repeatingcmds.js):
'rmovable # // Repeats bringing up targeting cursor to set movable property on multiple objects
'rnodecay // Repeats bringing up targeting cursor to set decayable property to false on multiple objects
Added new areacommand (js/commands/targeting/areacommand.js):
'areacommand name [string] // Sets name of all objects within targeted area to [string]
Updated 'decorate command script to better handle flags passed in via admin welcome script for things like facet addons (js/commands/decorate.js)
Updated fire breath script (js/npc/special/fire_breath.js) to get fire breath info per NPC based on their sectionID rather than their base body ID
Updated facet ruleset script (js/server/misc/facetRuleset.js) with an override for GMs trying to snoop players even in places where snooping is disallowed
Updated facet ruleset script (js/server/misc/facetRuleset.js) to allow damage that's not coming from a player/NPC source even in Trammel/Ilshenar
Added teleport locations for entering/leaving Blackthorn Dungeon in Felucca/Trammel (js/teleport.scp)
Updated 'remove and 'rremove commands to release any targeted objects from potential multis they are locked in to properly update lockdown count (js/commands/targeting/remove.js, js/commands/custom/repeatingcmds.js)
Updated felucca/ilshenar world templates with decorations (js/jsdata/worldtemplates/felucca_*/ilshenar_*)
Added world templates with decorations for Trammel (js/jsdata/worldtemplates/trammel_*)
Added DFN entry for Power Generators, and spawn entries for these in Ilshenar (dfndata/item/puzzles/puzzles.dfn, dfndata/spawn/ilshenar/spawn_ilshenar_world_general.dfn)
Added script for Power Generators, which initializes random puzzles on creation and rewards player with diamonds/arcane gems/shadow iron ore when solved, or lightning when failing to solve (js/item/power_generator.js)
Added support for overriding newbie-state of items added to players via dfndata/newbie/newbie.dfn. Supported syntax:
PACKITEM=sectionID[, amount[, newbieFlag]] // To use newbieFlag with PACKITEM, amount must also be specified. Flag can be 0/1
EQUIPITEM=sectionID[, itemHue[, newbieFlag] // To use newbieFlag with EQUIPITEM, itemHue must also be specified. Flag can be 0/1
Casting the Earthquake spell will no longer affect the caster, or cause them to become criminal when cast out of town with no impacted targets
Fixed a bug where caster would remain frozen after finishing casting targetless spells like Earthquake
Fixed a bug where caster would remain frozen if spellcast was cancelled half-ways through by picking up or equipping an item
Fixed a bug where caster would remain frozen if spellcast was interrupted by losing concentration from taking melee damage in combat
Fixed a bug where a paralyzed player would remain frozen even if taking magic or poison damage, which releases them from paralyzis
Fixed a bug where target of Paralyze spell would not visually be shown as frozen in target's client
Fixed a bug where a caster frozen while casting a spell could become unfrozen mid-cast because of incoming magic damage
Address overflow issue in MultiMul.cpp (punt)
Address various cast issues (punt)
Corrected jscript project, to not include two files that where for stand alone programs (and resulted in main being added twice in the library (and once was incorrect all ready). (punt)
Replaced RoundNumber with std::round (punt)
The original physical appearance of characters targeted by 'make admin/gm/cns is now kept track of, and restored upon being targeted by 'make player
Fixed an issue where the .HasSpell JS Method was off by 1 when looking for specific spells in player's spellbook, due to 0-based array indexing in code vs 1-based indexing for Spells in DFNs
28/08/2023 - punt
Replaced all routine calls with a specific type of stream ifstream/ofstream to the generic istream/ostream for flexibility
Modernized region resource loading/saving code
24/08/2023 - punt
Fixed a memory leak with regions.cpp, related to worldsaves
14/08/2023 - Maarc/ldilley
Upgraded from SpiderMonkey 1.7 to 1.8.0-RC1, which adds support for Array.reduce() and reduceRight(), expression closures, and generator expressions
07/07/2023 - Xuri
Fixed an issue which could cause lamp posts to turn into tall candelabras when light levels change
05/07/2023 - Xuri
Fixed an issue with script context restoration while getting Char JS Properties that would also modify the return value for that property
04/07/2023 - Xuri
Applied fix to keep script context intact when getting certain Char JS Properties (like name); as before, requires dummy function to be present in script
Fixed an issue with 'tweak command not working properly alongside presence of onNameRequest JS events in other scripts on character (js/commands/targeting/tweak.js)
Fixed issue where character's stats (str, dex, int) could return value lower than 1 due to temporary debuffs, causing issues in status gump
02/07/2023 - Xuri
Cleaned up a couple of warnings highlighted by static code analysis
Fixed an issue with NPC evasion pathfinding where the direction wasn't always set correctly
Fixed an issue with onNameRequest JS Event where the size of param jsval (2) didn't match actual number of parameters provided (3)
Removed setting uoxTimeout.tv_usec to 1 in CNetworkStuff::CheckLoginMessage() to address slower core loop iterations on Windows, due to differences in timer resolutions supported by WinSock2 function select() on different platforms - tv_usec 1 is treated as 1 microsecond on Linux/macOS, but as 1 millisecond on Windows
01/07/2023 - Xuri (0.99.6-RC6)
Removed arbitrary and hidden restrictions on refreshing list of online players shown with 'wholist command
Fixed an issue where player ghosts that get teleported would not see themselves get updated to new location
Fixed a server crash from clients disconnecting while running server in debug mode
Improved how container updates are sent to players; now only sends to clients that have actually opened the container, and who are still within range
Added more information about UO data files being loaded during server startup
Enhanced the GM 'add menu to allow clicking directly on images of items/npcs to add them, and adjusted size of menus to accommodate this
Fixed an issue with fleeing NPCs that could cause them to attempt to flee across time and space, regardless of distance to target/attacker in combat
Added NPC AI that runs away from players if they get too close (even outside combat). Applied to hind, rabbits, squirrels, ferrets and various birds by default:
AI_ANIMAL_SCARED (aitype 12)
Fixed issues with NPCs fleeing forever, or getting stuck in flee/don't flee loop, by introducing max fleeing distance (50 tiles) and cooldown (30 sec) on fleeing
Updated onNameRequest JS Event to include third parameter with origin of name request, so script responses can be tailored appropriately:
onNameRequest( myObj, requestedBy, requestSource )
Potential values for requestSource:
0 - Speech/System Messages
1 - Guild Menus
2 - Stat Window (self)
3 - Stat Window (other)
4 - Tooltip
5 - Paperdoll Journal
6 - Paperdoll
7 - Single Click / All-Names
8 - System
9 - Secure Trade Window
Added Adaptive Performance System (APS) that dynamically adjust how often NPC AI/movement is checked based on overall shard performance. If performance drops below defined threshold, UOX3 gradually slows down checks for NPC AI/movement to prioritize player movement/speech/command responsiveness. If performance climbs back up above threshold, slowdowns are gradually removed. The following UOX.INI options have been added under [system] category to support this system:
APSPERFTHRESHOLD=50 // Performance threshold (measured in simulation cycles/sec) below which the APS kicks in
APSINTERVAL=100 // How often (in milliseconds) the APS checks performance and makes adjustments (if needed) to balance out shard performance
APSDELAYSTEP=50 // How much the delay timer is modified by (in milliseconds) each time APS makes adjustments
APSDELAYMAXCAP=2000 // Max amount of of delay APS can introduce for NPC AI/movement handling when attempting to restore shard performance
Added new JS script with packet hook for packet 0xA4 as sent by CUOWeb client, which includes information about CUOWeb user and potentially secret key required for connecting to shard
Added new UOX.INI setting where a secret shard key can be defined, which can be used as a way to restrict which clients can connect to the shard:
SECRETSHARDKEY=None // None by default
Added new JS Methods for Region objects:
.GetOrePref( oreType ) // Get ore preference data for ore type found in town region. Returned as an array containing the following data:
orePrefData -> [
oreName, // name of ore
color, // color of ore
minskill, // min skill to mine ore
ingotName, // name of ingot created from ore
makemenu, // makemenu entry for crafting something from ingot
oreChance, // default global chance of finding this ore type
scriptID // script attached to mined ore
],
orePrefChance // Chance of finding this ore type in given town region
.GetOreChance() // Get base chance of finding any ore in town region
Moved Mining skill plus gravedigging feature from hard code to scripts (js/skill/mining.js) to make it easier to maintain and/or customize, and removed hard coded variants
Gravedigging now relies on the ore resource system behind the scenes to restrict how often graves in a given area can be dug up
Fixed some incorrect references to .worldNumber Character property in misc scripts (should be .worldnumber)
Made some "hard-scripted" system messages in misc scripts use dictionary system instead
Added spawn region for banker NPCs in Serpent's Hold (dfndata/spawn/felucca/spawn_town_serpents_hold.dfn, dfndata/spawn/trammel/spawn_town_serpents_hold.dfn)
Fixed region definition of Ocllo to actually cover the entire town (dfndata/regions/regions.dfn)
Added numerous additional locations accessible with 'goplace # command, for key locations in Ilshenar, Malas, Tokuno Islands and Ter Mur (dfndata/location/location.dfn)
Revised travel-menu portion of GM menu (shortcut: 'travel) to include more travel options based on new locations (dfndata/items/travelmenu.dfn and travelmenu.bulk.dfn)
Fixed an issue where NPCs could attempt to attack targets in other worlds/instances
Added new JS Event that triggers for characters who are about to deal damage in combat. Complimentary to onDamage, which triggers for chars receiving damage:
onDamageDeal( dmgDealer, dmgReceiver, damageValue, damageType )
Added new JS Event that can trigger in global script upon creation of new player chars. Note that this will trigger in place of onCreateDFN event for player characters:
onCreatePlayer( pChar )
Added new JS Event that triggers for characters selecting a target with a spell. Complimentary to onSpellTarget, which triggers for targets selected with a spell:
onSpellTargetSelect( caster, target, spellNum )
Updated onCombatStart and onCombatEnd JS Events to also trigger for the other party in combat
Updated onPickup JS Event to include a third parameter - the potential container item was picked up from. Event now also triggers event in scripts attached to said containers:
onPickup( iPickedUp, pChar, iCont )
Added tracking of total playtime per individual character, and per account across all characters, and exposed these properties to JS engine:
.totalPlayTime // Account property, total playtime across all chars
.playTime // Character property, total playtime on given character only
Added new player-accessible command ('playtime) to spit out the playtime of current character/account as a whole (js/commands/playtime.js)
Implemented first version of Young Player System:
Replaced the UNUSED9 account flag with YOUNG, to be used by Young/New Player System
Added new JS Account property that gets/sets whether player account is considered Young:
.isYoung
Added new Char timers:
TIMER_YOUNGHEAL // Restricts how often Young players are healed by NPC healers
TIMER_YOUNGMESSAGE // Restricts how often Young players are warned about dangerous looking monsters in overworld
Updated GM commands 'get and 'set to get/set .isYoung property of player's account (js/commands/targeting/get.js and set.js)
Added new UOX.INI setting to enable/disable Young Player System (enabled by default):
YOUNGPLAYERSYSTEM=1
If Young Player System is enabled, all newly created player accounts are automatically marked with Young flag
Added new script to handle various restrictions and functions related to Young characters (js/player/young_player.js):
Young characters will have [Young] displayed over their head
Young characters will have their Young status checked and verified on every login + every stat/skill gain, to revoke the Young status if any of the following is true:
Account has a total playtime of more than 40 hours
Any character has more than 350 total (base) skill points
Any character has more than 70 skill points in a single skill
Any character has more than 150 total stat points
Any character has more than 80 stat points in a single stat
Young characters can renounce their Young status manually by saying the words "I renounce my young player status"
Young characters get an additional item upon creation:
a new player ticket, which can be combined with any other players new player ticket for both players to get a reward:
a sextant (shows Young players directions to nearest moongate/bank regardless of where they are, as long as outdoors)
a hair restyling deed
a ranger armor set (if coreShardEra is T2A or lower)
a spellbook with 1st to 4th circle spells (if CoreShardEra is UOR or higher)
a fireworks wand
a spyglass
a dye tub and dyes
Young characters cannot target other player characters with hostile spells or skills
Young characters cannot be the target of other player characters' hostile spells or skills
Young characters can only cast beneficial spells upon themselves or other Young characters
Young characters can only be the target of beneficial spells from other Young players
Young players (and their pets/followers) cannot attack or harm any other players (or their pets/followers), nor themselves be attacked or harmed by any other players (or their pets/followers), whether from combat, spells, skills or items
Young players don't lose any of their items on death, and are teleported to the nearest healer upon death with all their items intact
Young players receive a warning upon entering dungeons that monsters there will be hostile
Updated global script (js/server/global.js) to:
Check/Verify Young status of players upon login
Attach young player script on login/creation for players on Young accounts
Give specific items to Young players upon creation
Added new script (js/item/corpse.js) that is assigned to all freshly created corpses. This script handles restrictions related to Young players interactions with corpses, and the interactions of other players with corpses of Young players
Updated JS Method .Carve() to return true/false depending on whether carving a corpse was successful
Updated Healer AI in code to heal nearby injured Young players
Updated Evil AI and Evil Caster AI in code to avoid selecting Young players as targets in combat outside of dungeons
Added a new section to UOX.INI - [young start locations] - that can be used to define starting locations for Young players. If only one such location is provided, all players start there. Otherwise, it matches the same starting location setup as the regular one - with one entry per town in Britannia.
Restricted transferring and/or friending of pets (code) and hirelings (hirelings.js) between Young and non-Young players
Restricted Young players from recalling or gating to Felucca facet
Young players can instantly logout from anywhere, at any time
Added new Item DFN tag - SPELLS - which specifies which spells a spellbook starts with, using the following syntax: SPELLS=0x00000000,0x00000000,0x00000000
The existence of a spell from within each circle have specific values (0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80), and a combined value of 0xff if all spells in said circle are present.
The first comma-separated value in the SPELLS tag represents spell values for circles 1 to 4, while the second comma-separated value represents the spell values for circles 5 to 8. The third comma-separated value is currently unused.
The last two digits (0x000000##) of the first value in the SPELLS tag represent the combined value of spells from the first circle, the 5th and 6th digits (0x0000##00) spells from second circle, the 3rd and 4th from third circle (0x00##0000), and the 1st and 2nd from fourth circle (0x##000000). Repeat for the second value in the tag, with fifth (last two digits) to eight (first two digits) circle spells.
Examples:
spellbook with only 1st circle spells: SPELLS=0x000000ff,0x0,0x0
spellbook with only 2nd circle spells: SPELLS=0x0000ff00,0x0,0x0
spellbook with 1st - 2nd circle spells: SPELLS=0x0000ffff,0x0,0x0
spellbook with only 2nd and 5th circle spells: SPELLS=0x0000ff00,0x000000ff,0x0
spellbook with only 4th and 8th circle spells: SPELLS=0xff000000,0xff000000,0x0
spellbook with all spells, from all eight circles: SPELLS=0xffffffff,0xffffffff,0x0
Added Item DFN entries for spellbook pre-filled with circles 1 to 4, and for spellbook pre-filled with all spells, and added these to GM 'add menu (dfndata/items/magic/misc_magic.dfn)
Fixed an incorrect character reference in Spyglass script (js/item/spyglass.js)
Added Item DFN entry for a fireworks wand with 50 charges (dfndata/items/gear/magic_items.dfn)
Added script for new player ticket (js/item/consumables/new_player_ticket.js)
27/06/2023 - Xuri
Updated guildmaster script to properly check and set timestamp for when a player joins an NPC guild (js/npc/ai/guildmaster.js)
Updated GM command 'get to show values of .npcGuildJoined player property
Updated GM command 'set to also accept true/false to set boolean flags, not just 1/0 (js/commands/targeting/set.js)
20/06/2023 - Xuri (0.99.6-RC5)
Added script for NPC guildmasters (js/npc/ai/guildmaster.js). Only one NPC guild has been setup in the script so far (more can be easily added) - the Thieves Guild - which if joined grants players the ability to steal from other players and to buy disguise kits
Added two new UOX.INI settings for NPC Guilds, which will give players discounts when buying or premium prices when selling items from/to NPCs that are members of the same NPC guilds as the player:
ENABLENPCGUILDDISCOUNTS=1
ENABLENPCGUILDPREMIUMS=1
Added two new NPCs, which there will now spawn one of in a random location in each city in Britannia (felucca facet):
m_thief_guildmaster (dfndata/npc/male_human.dfn)
f_thief_guildmaster (dfndata/npc/female_Human.dfn)
Added two new character properties to keep track of which NPC guild a player (or NPC) belongs to. These properties have been exposed as the following Character JS properties:
.npcGuild // ID of NPC guild, as defined in script
.npcGuildJoined // Timestamp for when player joined NPC guild
Added script for Disguise Kits (js/item/disguisekit.js). These allow members of the Thieves Guild to disguise themselves from the prying eyes of other players.
Added two new character properties:
.isDisguised // true/false flag for character being disguised
.origName // used to store character's original name before disguise went into effect
Moved implementation of Stealing skill from code to script (js/skill/stealing.js) and revamped it completely in the process. Changes include:
New features:
Town rare stealing - any item marked as "special stealable" with new item property .stealable can be stolen, even if it's locked down by a GM on the ground, or inside a container
When stealing from item piles, thief can potentially steal the amount of items that makes up the max weight limit for what they can steal, from those piles
Chance to successfully steal is now affected by whether there are any characters (NPCs or Players) that witness the attempt. Depends on distance to character, and direction character is facing
Players now become "permagrey" when successfully stealing from another player, regardless of whether it's witnessed
Players now receive a "stealing" flag when stealing from another player, regardless of whether it's witnessed
Stolen items cannot be removed from thief's backpack for 30 seconds following the theft of the item (AoS core shard era and above)
Optional AoS feature to steal special consumable items from monsters
Updated default stealing rules:
Updated calculations to determine chance of success when stealing
Players cannot steal while engaged in combat
Players are revealed if hidden as soon as they use the stealing skill
Players can no longer steal items in the secure trade window
Players can no longer steal items from NPC shopkeepers
Both hands must be free to steal
Stealing now checks line of sight to target player/object
Only members of Thieves Guild (NPC guild) can now steal from other players, unless they are guild enemies
Players can no longer steal from NPC guards by default
Players can no longer steal from the same NPC monster more than once
Only gold and gems can be stolen from innocent players in dungeon/ll areas of Felucca, if core shard era is set to AoS or higher
Players can no longer steal items held on cursor by other players
Orcish masks now eplode if player steals from orcs while wearing it
If core shard era is set to LBR or lower, player is marked as an aggressor if they steal from another player
Guards can only be called on players that are flagged as criminals within the first 10 seconds of them being flagged
Stealing script options:
Allow stealing entire containers (off by default pre-AoS)
Return stolen items on thief death (off by default)
Temporarily make stolen items immovable in thief's backpack (on by default post-AoS)
Temporarily protect traded items (on by default)
Let dexterity affect chance for successful theft (off by default)
Let light level affect chance for successful theft (off by default)
Allow stealing from NPC Guards (off by default)
Allow stealing special loot from monsters (on by default post-ml)
Moved implementation of Snooping skill from code to script (js/skill/snooping.js), with some changes:
Players cannot snoop pack animals from inside a house, if the animal is outside
The deeper inside main backpack a container sits, the harder it becomes to snoop inside it
Included an optional feature that lets targets of snooping gradually become more aware, increasing the difficulty of succeeding. This awareness fades over time.
Players have a chance to stay hidden while snooping, based on their Hiding skill
Karma is now lowered by snooping regardless of success or failure
Added tracking system for "aggressors" in combat. A player attacking someone (regardless of flag status) will be marked as aggressor to that someone for 2 minutes
Added tracking system for "permagrey" flags - these are stored on a per-target basis, so a player can be flagged visibly as permagrey to multiple other players. Persists until player dies.
Player combat targets and war mode are now cleared on logout
Added new Character JS Methods:
.AddAggressorFlag() // Adds aggressor flag for character towards target character
.RemoveAggressorFlag() // Removes character's aggressor flag towards target character
.CheckAggressorFlag() // Check if character has an aggressor flag towards target character
.UpdateAggressorFlagTimestamp() // Updates the expiry timestamp of character's aggressor flag towards target character
.IsAggressor() // Returns true/false depending on whether character has any active aggressor flags
.ClearAggressorFlags() // Clears all the character's aggressor flags towards other characters
.AddPermaGreyFlag() // Adds permagrey flag for character towards target character
.RemovePermaGreyFlag() // Removes character's permagrey flag towards target character
.CheckPermaGreyFlag() // Check if character has an active permagrey flag towards target character
.UpdatePermaGreyFlagTimestamp() // Updates the expiry timestamp of character's permagrey flag towards target character
.IsPermaGrey() // Returns true/false depending on whether character has any active permagrey flags
.ClearPermaGreyFlags() // Clears all the character's aggressor flags towards other characters
Players will now be unable to hide if within visual distance and in line of sight of their attacker or current target in combat
Server leave-announcement now only happens after the logout timer has expired, instead of the exact moment the player presses the logout button
Fixed an issue that could cause swimming NPCs to swim on land
NPCs now have the ability to temporarily ignore unreachable targets in combat. If attacked by someone they are ignoring, they will enter evade state and try to move away from that someone.
SpawnRegions now support NPCLISTS with weighted entries. Example of an NPCLIST with 75% chance of spawning some kind of orc, and 25% chance of spawning a ratman archer:
[NPCLIST example]
{
75|NPCLIST=allorc
25|ratman
}
Added 3 additional "all purpose" item properties (.more0, .more1 and .more2) and exposed those to JS engine. These work the same as more/morex/morey/morez
Mark spell now stores a 4th property on recall runes - instanceID. This is stored in the rune's .more0 property.
Recall and Gate spells now check the recall rune (or runebook)'s 4th location property - instanceID - to determine where the player ends up
Fixed a server crash related to equipment being automatically unequipped if character is no longer strong enough to have it equipped
Added new JS Function to check if any characters at specified location potentially block movement:
DoesCharacterBlock( x, y, z, worldNum, instanceID ) // returns true if a character exists at given coordinate (within z +/- 4)
11/06/2023 - Xuri
Fixed an issue with the Clumsy spell script (js/magic/clumsy.js) where an attempt could be made to send a system message to the non-existent sockets of NPCs casting the spell
Fixed an issue where [golem] NPCs were trying to GET crafted_golem instead of craftedgolem (dfndata/npc/clockwork.dfn)
Fixed an issue where [golem] and [craftedgolem] NPCs were setup to use colossal blow special ability, but ability script didn't allow for it (js/ai/special/colossal_blow.js)
Removed some debug messages from gate opener script (js/item/gate_opener.js)
Added some comments to musiclists in regions.dfn, and added a few missing music entries to a few regions (dfndata/regions/regions.dfn)
Added function _restorecontext_() {} to another bunch of scripts:
js/npc/ai/monster/ethereal_warrior.js
js/commands/zerokills.js
js/commands/killall.js
js/commands/fixcont.js
js/commands/delid.js
js/commands/cleanup.js
js/commands/areacommand.js
js/item/guildstone.js
js/item/gate_opener.js
js/item/bedroll.js
js/item/potion.js
js/item/kindling.js
js/item/doors.js
js/item/dungeons/switch_puzzle_covetous.js
js/skill/peacemaking.js
js/skill/detecthidden.js
js/skill/craft/cooking.js
js/skill/craft/blacksmithing.js
js/skill/cooking/wheat.js
js/skill/cooking/flourmill.js
js/npc/ai/pack_ai.js
js/npc/ai/monster/savage_shaman.js
js/npc/ai/monster/orc_chopper.js
js/npc/ai/monster/orc_brute.js
js/npc/ai/exodus_clockwork.js
js/npc/special/life_drain_aura.js
js/npc/special/dull_copper_elemental.js
js/npc/special/damage_aura.js
js/npc/speech/speech_monster.js
js/server/misc/dungeon_trap.js
js/server/house/playerVendorDeed.js
js/server/house/houseCommands.js
09/06/2023 - Xuri
Fixed client freeze after login for sub-7.x clients, caused by sending an unsupported animation packet; FORCENEWANIMATIONPACKET will now not be enabled if support for client versions below 7.x is enabled
Added function _restorecontext_() {} to a couple more scripts:
js/commands/targeting/set.js
js/commands/decorate.js
js/commands/go.js
Fixed an issue with 'xgo command that would prevent it from working properly (js/commands/targeting/x.js)
Fixed an issue with teleport function in help gump which prevented pets from teleporting with player (js/server/misc/helpgump.js)
Fixed an issue with players in some cases getting toggled out of combat mode visually on other clients even though they were still in combat mode (when target dies, resurrection of ghost in combat mode, etc)
Players no longer see a message above their character's head about their own character attacking other characters
05/06/2023 - Xuri
Fixed an issue with patrolling-portion of hireling script - was incorrectly using Z coordinate as a parameter of WalkTo - should be maxSteps (js/npc/ai/hireling.js)
Added error checking to .WalkTo() and .RunTo() JS Methods that cancels pathfinding attempt if maxSteps provided is zero
Swapped around order of arguments in ScriptError() function in cScript.cpp, so the const char used by va_start() is now the last named argument (thanks ldilley!)
Fixed a socket error with 'move command alias in js/commands/targeting/tele.js (thanks Dragon Slayer!)
Fixed a server crash caused by an attempt to fetch the serial of a nullptr!
02/06/2023 - Xuri
Added new protected property for CChar class to track a player's currently controlled pets/followers/summons, and renamed the on tracking all pets owned:
GenericList<CChar *> activeFollowers
GenericList<CChar *> petsControlled -> petsOwned
Added new JS Character Methods to view/manipulate follower list:
GetFollowerList()
AddFollower( npcObject )
RemoveFollower( npcObject )
Added new JS Character Property to fetch current count of followers character has:
.followerCount
Added new GM commands for spitting out information on all pets/followers a player has, in the following format: Name: %s | ID: %i | Serial: %i | x: %i | y: %i | z: %i | world: %i | instanceID: %i
'listpets
'listfollowers
Replaced most instances of GetPetList in code and scripts with GetFollowerList, as that's what we actually care about for the most part
Updated code and relevant scripts to make use of AddFollower and RemoveFollower functions where appropriate
Modified code for restoring pet loyalty upon feeding pet; by default it now restores 10/100 loyalty per time pet is fed, while if CoreShardEra setting in UOX.INI is set to AoS expansion or higher, loyalty is instantly restored to max when pet is fed (regardless of amount)
Updated AreaCharacterFunction and AreaItemFunction JS Functions to still work if third parameter (socket) is provided as null
Modified code and relevant scripts that teleport pets/followers along with player to only do so for pets/followers using the "follow" wandermode with player as follow target
Updated some instances of code and script that checked for both controlSlot AND maxFollowers requirements - now only checks maxFollowers if controlSlots is set to 0 in ini
Added function _restorecontext_() {} to a couple more scripts:
js/commands/targeting/tele.js
Updated error message shown when attempts are made to add deleted objects to refreshQueue, to include name, ID and serial of the object in question
30/05/2023 - Xuri (0.99.6-RC4)
Fixed an issue that prevented onBuyFromVendor() and onBoughtFromVendor() JS Events from triggering when attached to NPC shopkeepers
Fixed an issue with help gump that prevented password management section from working as intended (js/server/misc/helpgump.js)
Fixed an issue where UOX3 would fail to load pre-HS multi.mul files
Added chess board to Misc->Games add menu (dfndata/items/ItemMenu.bulk.dfn)
Fixed an issue with 'move (alias for 'telestuff) command that referenced the wrong variable name (js/commands/targeting/tele.js)
When a player is teleported via the GM 'wholist menu, any pets within range are now also brought along for the ride
Consolidated error-reporting for JS Functions, Object Methods and Object Properties to provide more context (scriptID, filename, line number) when something goes wrong
Added some missing shield IDs (0xA649, 0xA64A, 0xA831, 0xA832) to IsShieldType() function
MAXRANGE item property previously only worked for ranged weapons; now it works for melee weapons too, and potentially allows melee weapons with combat range longer than 1 tile
MAXRANGE item property can now be used to define max combat range for melee weapons
Fixed an issue (non-critical) with .PlaceInPack() JS Method that would cause UOX3 to try adding items marked for deletion to refreshQueue and spam console with errors
Added missing AI scripts to summoned Blade Spirits and Energy Vortexes (dfndata/npc/magicsummon.dfn)
Fixed an issue with weight calculation for hireling backpacks (js/npc/ai/hireling.js)
Fixed an issue with the 'fix command, which would in most cases set character's Z to -1 regardless of location, but now adheres to map elevation instead
Fixed an issue with Pack AI (js/npc/ai/pack_ai.js) that prevented pack members from attacking target correctly (thanks Dragon Slayer)
Fixed an issue with DoesMapBlock JS Function that incorrectly checked for 6 function arguments, when it actually requires 8
Fixed an issue with DoesDynamicBlock JS Function that incorrectly checked for 8 function arguments, when it actually requires 9
Fixed an issue with runebook script (js/item/runebook.js) that prevented players from being able to use recall charges without having spellbook with spell in inventory
Fixed issues with placement of tall items on ground/floor, and with stacking of items in houses
Fixed incorrect alias for woodland armor (dfndata/items/gear/armor/other/armor/wood.dfn - thanks Dragon Slayer)
Fixed a critical issue with script context sometimes changing while executing a script, because of events in other scripts being triggered. Affected scripts can be safeguarded against this by the addition of a dummy callback function anywhere in the script: function _restorecontext_() {}
Fixed an issue with non-animal pets not gaining loyalty when being fed (thanks Dragon Slayer)
Added new JS Object Methods for Chars/Items/Multis to fetch list of custom tags associated with object:
.GetTagMap() // Gets list of persistent custom tags associated with object
.GetTempTagMap() // Gets list of temporary custom tags associated with object
Added new JS commands ('GETTAGMAP and 'GETTEMPTAGMAP) that spits out details of custom tags associated with targeted object (js/commands/custom/misc-cmd.js)
Added new JS command ('USEITEM) that acts as a short-cut for double-clicking on targeted item (js/commands/custom/misc-cmd.js)
Updated 'ADD # and 'ADD ITEM # JS commands to support targeting a container directly and adding the new item inside (js/commands/targeting/add.js)
Updated axe script to only perform lumberjacking skill-check when there's still wood available in a given area, and to play appropriate animations for Gargoyle players (js/item/axe.js)
Updated script for gameboards to make generated pieces newbiefied so they won't appear on ground if board decays (js/item/gameboards.js)
Updated script for stablemasters to avoid relying on global variables (js/npc/ai/stablemaster.js)
Updated names of items crafted with runic hammers to include the material name of the hammers used to craft them (js/skill/craft/crafting_complete.js)
Fixed a small issue with Detect Hidden skill that would return the wrong message if players found anyone hiding nearby (js/skill/detecthidden.js)
Fixed an issue that prevented tile overrides in dfndata/maps/tiles.dfn from loading properly
Added entries for a couple of walls with missing no-shoot flags to tile overrides in dfndata/maps/tiles.dfn
Updated JS Method .SoundEffect() to support optional third argument (creatureSoundNum) to play creature-defined sounds from dfndata/creatures/creatures.dfn. New syntax:
.SoundEffect( soundID, allHear[, creatureSoundNum] ) // 0=SOUND_STARTATTACK, 1=SOUND_IDLE, 2=SOUND_ATTACK, 3=SOUND_DEFEND, 4=SOUND_DIE
Added new Character JS Methods:
.SetRandomName( nameListID ) // apply a random name from specified namelist to character
.FindItemSection( sectionID ) // find item in player's backpack with specified sectionID
Added new Socket JS Method:
.OpenContainer() // Opens specified container for socket
Fixed status window sex flag not being correctly sent for player characters of a Gargoyle nature (Dragon Slayer)
Fixed some issues with static pet scripts (js/npc/pets/*) that would allow players to exceed max number of followers and/or controlslots when buying animals from animal trainer
Updated OnBuyFromVendor, onBoughtFromVendor, onSellToVendor and onSoldToVendor JS Events to include a fourth parameter - iAmount - the number of items bought/sold
Fixed some issues with stabling and claiming pets from animal trainer NPCs (js/npc/ai/stablemaster.js)
Fixed an issue with 'remove and 'rremove commands where they would not reduce petCount/controlSlotsUsed for owners of characters removed (js/commands/targeting/remove.js and js/commands/custom/repeatingcmds.js)
21/05/2023 - Dragon Slayer, Xuri
Added initial pass for supporting Trammel PvP ruleset, which can be applied to and/or customized per facet and optionally overridden per region via js/server/misc/facetRulset.js (Dragon Slayer)
Misc script cleanup and extension of pvp ruleset script to include target handling for Blade Spirits/Energy Vortex, as well as the Provoke barding skill (Xuri)
Added custom AI scripts for summoned Blade Spirits (js/npc/ai/summon/blade_spirit.js) and Energy Vortexes (js/npc/ai/summon/energy_vortex.js) with updated target selection rules (based on target stats) and checks for active pvp ruleset (Xuri)
Added JS Function to check for existence of a JS event in another file (Xuri):
DoesEventExist( scriptID, eventToCheck )
Updated scripted magic spells to check for facet ruleset before allowing casting hostile and/or beneficial spells on other players (Xuri)
Added new JS Method for Guilds to check if they are "at peace", i.e. NOT at war with any other guilds (Xuri):
.IsAtPeace() // Returns true if guild is at peace, and not at war with any other guilds
Added support for triggering onPickup JS event for Characters, and not just items (Xuri)
17/03/2023 - Dragon Slayer, Xuri
Created framework, gumps, initial system for Bulk Order Deeds (Dragon Slayer)
Expanded BOD system to include gold, fame and special item rewards (Xuri)
Added optional support for triggering BOD offers from shopkeepers via context menus (Xuri)
Added new UOX.INI section with settings for Bulk Order System: (Xuri)
OFFERBODSFROMITEMSALES=1 // If enabled, shopkeepers might offer BODs when players sell items to them
OFFERBODSFROMCONTEXTMENU=0 // If enabled, shopkeepers might offer BODs via context menu option
BODSFROMCRAFTEDITEMSONLY=0 // If enabled, only selling of crafted items will trigger BOD offers
BODGOLDREWARDMULTIPLIER=1 // Reward multiplier for Gold given for completing a BODs - defaults to 1.0
BODFAMEREWARDMULTIPLIER=1 // Reward multiplier for Fame given for completing a BOD - defaults to 1.0
Updated smithing-related create DFNs (dfndata/create/*) with proper names for entries (Xuri)
Added special BOD item rewards: (Xuri)
Sturdy Pickaxe - More uses than normal pickaxes
Sturdy Shovel - More uses than normal shovels
Mining Gloves +1/+3/+5 - Boosts mining skill when equipped
Runic Hammers - Adds bonuses to crafted weapons and armors, applied after crafting the items (js/skill/craft/crafting_complete.js)
Colored Anvils - No unique property other than color, but can be added to houses as decoration/functional anvils
Ancient Smithy Hammers +10/+15/+30/+60 - Boosts blacksmithy skill when equipped
(Not fully implemented, AoS feature) Gargoyle's Pickaxe
(Not fully implemented, AoS feature) Prospector's Tool
(Not fully implemented, AoS feature) Powder of Temperament
(Not fully implemented, AoS feature) Blacksmith Power Scrolls +5/+10/+15/+20
Updated onMakeItem() JS event to always include the create entry ID as a parameter, even when crafting an item failed (Xuri)
17/03/2023 - Xuri
Fixed an issue where casting Wall of Stone inside a multi would lead to the wall of stone never expiring, because it was not correctly marked as a field spell
Reduced combat message spam; attacking messages now only appear when attacking targets who are not already fighting the attacker
Added a new character state - "passive combat mode" - primarily used by players when they tab out of combat. Tabbing out of combat will prevent the character from retaliating in combat if they're already fighting someone
Fixed several issues with dropping items through floors, tables and generally not being placed correctly when dropped inside multis
Hard-defined the Z-level at which some jewellers in Britain spawn to deny them rooftop access (spawn_felucca_town_britain.dfn and spawn_trammel_town_britain.dfn)
Added system messages informing shard staff with elevated command privileges why they are getting 100% skill check success, and no spellcast delay
10/03/2023 - Xuri
Fixed an issue where EraStringToNum JS Function would return incorrect values and lead to unexpected behaviour
Added some safeguards against server crashes in onNameRequest() and onTooltip() JS Events
08/03/2023 - Xuri
Fixed an issue where houses could lose track of locked down items on server restart
Fixed an issue where items could be accidentally dropped through the floor of houses/boats
04/03/2023 - Xuri (0.99.6-RC3)
Updated Item DFNs with ORIGIN and SECTIONID tags for relevant items
Added JS Function to make comparing eras (based on object origin or server settings) easier:
EraStringToNum( eraString ) // Takes an era string (uo, t2a, uor, td, lbr, aos, etc) and returns an int
Updated some JS scripts to use EraStringToNum() for era comparisons (potionkeg.js)
Default CORESHARDERA setting is now LBR
Removed PUB15 as a separate "era" - it's identical to late stage LBR anyway:
Removed support for GETPUB15 tag
Added support for GETUO tag for items/NPCs:
GETUO=<sectionID> // Inherit DFN section if core shard era is Ultima Online (original release, before T2A)
Rewrote portions of MsgBoardQuestEscortCreate() function in msgboard.cpp to ensure only escort regions within same world as NPC can be selected as destinations
Increased maximum number of possible escort regions that can exist from 255 to 65535
Added region definitions for all shrines in Britannia (Fel & Trammel), and marked them as valid destinations for NPC escorts (uox3/regions/regions.dfn)
Moved bankers from vendor to human DFN files, and made them inherit basehuman instead of basevendor - since they are not vendors
To address an issue with escorted NPCs not timing out and vanishing if they are left in a "dormant" area of the world with no player activity, the NPCs are marked as "always awake" the moment they arrive at their destination. Note that the uox.ini setting ALLOWAWAKENPCS needs to be enabled for this to work.
Fixed an issue where spawnsection of spawners did not show up correctly in tweak menu
Fixed an issue where the generic Orc AI script didn't have a return true at end of onDamage() event, which prevented all orcs from taking damage in combat (js/npc/ai/monster/orc.js)
Moved Anatomy skill-check in healing script (js/skill/healing.js) from onCallback1() function to onTimer() to prevent the skill-check from being spammable
Added mount ID for Frost Mite in creatures.dfn, allowing it to be used as mount
Exposed the following character properties to JS engine, which can be used to view/adjust the permanent hair/beard options for a character:
.hairStyle
.hairColour
.beardStyle
.beardColour
Updated 'kill hair, 'shavehair, 'shavebeard and 'remove commands to clear permanent hair/beard colour and style properties in addition to removing the item itself
Added a GM override to let GMs place as many houses as they want (js/server/house/houseDeed.js)
Fixed an issue where attempting to sell items to NPC shopkeepers could result in client crashing
Added a new JS Event:
onMultiLogout( iMulti, cPlayer ) // Handles players logging out while inside multis
Updated house script (js/server/house/house.js) with onMultiLogout event, which allows owners (always) and co-owners/friends/guests (if option enabled in uox.ini) to safely log out inside the house (without getting booted).
Added a "keyless" option for interacting with locked doors (js/item/doors.js) of player-owned houses, which lets owners/co-owners/friends/guests of a house use locked doors in the house without requiring a key in their backpack, if the options for that are enabled in UOX.INI. Enabled for owners/co-owners and friends by default (but not for guests)
Note that if option to safely log out is enabled, but keyless option is NOT enabled, then the server will check if the player has a key to the house in their backpack, and eject them from the house upon logging out if not. This is to make sure players don't get stuck inside a house they can't get out of because they lack the rights to open doors etc.
Added new UOX.INI options, under the [houses] section:
SAFECOOWNERLOGOUT=1 // Allow co-owners to safely and instantly log out inside house
SAFEFRIENDLOGOUT=1 // Allow friends to safely and instantly log out inside house
SAFEGUESTLOGOUT=1 // Allow guests to safely and instantly log out inside house
KEYLESSOWNERACCESS=1 // Allow owner of house to use locked doors in house without key in pack
KEYLESSCOOWNERACCESS=1 // Allow co-owners of house to use locked doors in house without key in pack
KEYLESSFRIENDACCESS=1 // Allow friends of house to use locked doors in house without key in pack
KEYLESSGUESTACCESS=0 // Allow guests of house to use locked doors in house without key in pack
Fixed NOHAIR tag from races.dfn not being loaded correctly
31/12/2022 - Xuri
Extended GetSpawnRegion JS Function to fetch spawn region reference based on a set of coordinates. Supported syntax are now:
GetSpawnRegion( spawnRegionID )
GetSpawnRegion( x, y, worldNum, instanceID )
Added new DFN tags for Items and NPC:
SECTIONID // Override which [sectionID] is stored for an object
ORIGIN // Store reference to which expansion/era of UO an item/NPC originated in
Added new Item/Character JS property:
.origin // Get reference to expansion/era of UO an item/NPC originated in
Fixed an issue with IsInBuilding JS Function which could only handled a limited subset of instance ID values
Corrected name of tag used to attach scripts to ore types - from SCRIPTID to SCRIPT
24/12/2022 - Xuri, punt, ldilley (0.99.6-RC2)
CMake is now default build system on Linux/FreeBSD, and an alternative for Windows/macOS-users instead of VS/XCode, though the old GCC/Make build process is still intact (for now)
Resource files (uox3.rc and uox3.ico) have been moved from UOX3/source to UOX3/assets
Build/project-related files have been moved to /make/[buildsystem] sub-directories, for both UOX3 and sub-projects:
UOX3/make/cmake
UOX3/make/VS2017
UOX3/make/VS2022
UOX3/make/XCode
spidermonkey/make/cmake
spidermonkey/make/VS2017
spidermonkey/make/VS2022
spidermonkey/make/XCode
zlib/make/cmake
zlib/make/VS2017
zlib/make/VS2022
zlib/make/XCode
CMake, VS2022 and XCode will compile sub-projects automatically when UOX3 is compiled, while VS2017 requires compiling sub-projects prior to UOX3
automake.sh script (still in root of repository) now uses CMake instead of GCC/Make, and supports optional arguments for creating debug/clean builds
Updated instructions on compiling UOX3 can be found on GitHub and/or in the UOX3 documentation
Some redundant files have been deleted from the repository (like DLL folder and file)
Code style guide added to UOX3/docs directory (styleguide.html)
Updated GitHub workflows to use cmake for Linux and to ignore changes to .txt/.html/.sln/.vcxproj files for both Linux & Windows workflows
17/12/2022 - Xuri
When a player says "vendor buy" or "vendor sell", NPC shopkeepers (and related JS events) will now respond in priority of distance to the player
11/12/2022 - Xuri
Added support for a SCRIPT tag in ore definitions in dfndata/skills/skills.dfn, which will be applied to any ore of that type that's mined
08/12/2022 - Dragon Slayer
Replaced orc Spawns with Savages in T2A orc fort. this would bring the spawns up to date with LBR.
03/12/2022 - Xuri
Updated .ResourceCount() and .UseResource() JS Object Methods to include optional parameter for sectionId. New supported syntax:
int ResourceCount( realId, colour )
int ResourceCount( realId, colour, moreVal )
int ResourceCount( realId, colour, moreVal, sectionId )
int UseResource( amount, realItemId )
int UseResource( amount, realItemId, colour )
int UseResource( amount, realItemId, colour, moreVal )
int UseResource( amount, realItemId, colour, moreVal, sectionId )
Fixed an issue where the bit flag for the HirelingCombatTraining setting was not set properly
Fixed an issue in SpiderMonkey VS project that prevented compiling a x64 debug build (thanks, punt!)
Some minor cleanup
03/12/2022 - Dragon Slayer
GM and Counselors can now go though the wind teleporter
03/12/2022 - ldilley
Comment line in jsconfig.mk that attempts to cat a non-existent Version file. This causes an error otherwise during the SpiderMonkey build.
Initialize totalPlayerGold in vendor.cpp.
Flag unused variable in gumps.cpp.
Update README.md to include references to FreeBSD and also alter the command (libtool instead of ar) used to generate the JavaScript library on macOS.
Improve automake.sh.
29/11/2022 - Xuri
Added some validation checks for attacker object in onDamage JS event in several scripts
Enabled onSellToVendor, onSoldToVendor, onBuyFromVendor and onBoughtFromVendor JS events to also run if attached to NPCs
Disabled location check for 'addmulti command
29/11/2022 - ldilley
Fixed many compile-time warnings (closes Fix compile warnings #131).
Clang and GCC builds were both successful and completely clean using -Wall, -Wextra, and -Werror. The following various problems were corrected:
Fix reasonable warnings reported by MSVC using /W4 /W3 /D_CRT_SECURE_NO_WARNINGS.
Returning final without virtual
Comparison of values with differing signedness
Assignment order
memset() expecting a multiple of a data type
A plethora of unused variables (commented or voided)
Comparisons always resulting in true
Failure to initialize missing members
Static methods (inlined)
Instances of case fallthrough (denoted)
Incompatible casts
Mismatching macros/methods requiring variable number of arguments
Bit shifting in bool contexts
Inappropriate pointer use
Potentially incorrect initialization of class/struct instances using memcpy()/memset()
Removed some instances of extraneous spaces/tabs.
27/11/2022 - Dragon Slayer, Xuri
Implemented potion kegs; these can be crafted by carpenters/tinkerers, and can be used to store potions at a fraction of their original weight (Dragon Slayer)
Only the owner (if locked down), the current holder (if in backpack) or someone who have previously taste identified a potion keg may add additional potions to it (Xuri)
Potions dropped from monsters and bought from stores are unidentified by default, but can be identified by players using the taste identification skill. (Xuri)
Potions crafted by players are identified by default for all to see (Xuri)
Releasing locked down items in houses now set the items as movable (1) instead of client default (0) (Xuri)
Added socket as another parameter to the onToolTip JS event
15/11/2022 - Dragon Slayer
Added special hair dyes
Updated item menu in dfndata/items/ItemMenu.bulk.dfn with dyes (Xuri)
Added hairstylist NPC alias to dfndata/npc/vendors.dfn (Xuri)
13/11/2022 - Xuri
When buying items from NPC shopkeepers where the total cost is higher than the buy threshold set in uox.ini, UOX3 will now check the player's bankbox for gold first, then their backpack second, instead of just failing outright if bank didn't have the required amount
Minor cleanup of some UO era-specific code for better maintainability
Adjusted default light-settings in UOX.INI:
DUNGEONLEVEL changed from 3 to 15
DARKLEVEL changed from 5 to 12
12/11/2022 - Dragon Slayer
Added hair-only and beard-only variants of hair dyes
Added hair stylist vendors that sell all types of dye
09/11/2022 - Dragon Slayer/ldilley
Added item definition (in misc/consumables.dfn), JS script (item/bearddye.js) and dictionary entries for hair dye
Combined hair and beard dye scripts into one, since they shared most code (Xuri)
Added dyes to alchemist shoplist (items/shoplist.dfn) (Xuri)
Removed old hair dye menu from legacy gump DFN (dfndata/misc/gumps.dfn) (Xuri)
Selling items to NPC shopkeepers now relies on sectionID of items instead of their ID/Type/Morex values (Xuri)
Tinkerers can now craft Fletching Tools (Dragon Slayer)
08/11/2022 - Dragon Slayer/ldilley
Added item definition (misc/consumables.dfn), JS script (item/hairdye.js) and dictionary entries for hair dye
Added hair dyes (and tribal paint) to new consumables menu in add-menu (Xuri)
Cleaned up hair dye script based on style guidelines, addressed a few issues (Xuri)
Removed hard-coded hairdye functionality (Xuri)
06/11/2022 - Dragon Slayer/Xuri
Implemented Taxidermy Kits for creating trophy house addons (Dragon Slayer)
Fixed an issue related to open doors in houses that would prevent the placement of house-addons because of an incorrect distance check (Xuri)
Fixed an issue with placement of house addons that would allow them to be placed in locations blocked either by other items or by parts of the multi itself (such as walls) (Xuri)
1/11/2022 - Dragon Slayer
Updated spawn regions in Yew with NPCs for Empath Abbey
1/11/2022 - Xuri
Base multis created with CreateBaseMulti() JS function or BuildBaseMulti() C++ function no longer require valid 'house/boat' locations to spawn
Fixed an issue where no reagents were consumed when casting recall/gate spells via spell icons in runebooks (js/item/runebook.js)
Spawn Regions will now more accurately spawn objects near desired heights supplied via PREFZ tags. Using PREFZ=20 will attempt to spawn NPCs on the second floor of a building with ground level at Z 0, for instance.
Added a new DFN tag usable in Spawn Regions to define a definite Z level at which to attempt to spawn objects (skips some steps in the process and assumes the defined Z is a valid Z):
DEFZ=# // Defines a definite Z level to attempt to spawn an object at
Updated banker AI script (js/npc/ai/banker.js) with some extra validation checks, system messages and to take max weight capacity of bankbox into account
The sectionID property of NPCs are now transferred to their corpses upon death, to make it easier to identify in scripts from which NPC a corpse really originated
30/10/2022 - Xuri
Player vendors in existing houses no longer teleport to new houses placed by owner nearby
Fixed script issue with demolishing house with player vendors in them
Fixed an issue where setting prices for items on player vendors would permanently overwrite the buy-value of the item. Player vendor prices are now stored as a separate property (but saved as part of the VALUE tag), also accessible by the following JS Item property:
.vendorPrice
Item description and vendor price are now cleared from items bought from player vendors
Tooltips for items with new descriptions or vendor prices in player vendor backpacks are now correctly updated
Only books, keyrings and unlocked containers can now be marked 'Not for Sale' in a player vendor's main/root backpack
Any items on player vendors can now be marked as 'Not for Sale' if placed within a container that has a price tag
Added additional feedback messages to players for various interactions with player vendors
Fixed a bug where player vendors would lose loyalty and 'go wild' like pets when not fed regularly
Split up some of the longer item lists in the 'add menu to prevent freezes on original 2D client
27/10/2022 - Xuri
Added some code to assist with preventing/debugging houses potentially decaying
Fixed an issue with freeshard server poll script, which attempted to fetch wrong ini setting
Fixed a server crash related to applying invalid prices for player vendor items
Neglecting to give item in player vendor pack a description now defaults to item name
Items in player vendor packs are now refreshed properly when players update price and name
Players can no longer issue pet control commands to player vendors via context menus
27/10/2022 - DragonSlayer
Added aliases in item definitions for containers
Consolidated all light item scripts into one, with options for auto-lights (lampposts) based on environment brightness level and more
Removed old light scripts (Xuri)
Updated consolidated lights.js script to handle custom dir values on lights, modified source of sound effects when turning lights on/off and made a few other minor adjustments (Xuri)
Revamped region spawn system
27/10/2022 - Xuri
Fixed an issue with onDyeTarget event where the dyetub and target object parameters were not set properly
Fixed some incorrect casting animation-related variable assignments for AI_HEALER and AI_EVIL_HEALER
Fixed an issue with pets not going wild from lack of loyalty to their owners when at zero loyalty
Addressed issues with idle/fidget animation setup that could cause NPCs to blink out of existence
Removed stray semicolon behind control statement related to triggering of OnFacetChange JS event
Fixed an issue with Bless spell when cast from item
Some minor code cleanup
24/10/2022 - Xuri (0.99.6-RC1)
Misc cleanup and standardization of style and naming conventions in code and scripts
Added comments for all dictionary-based system messages in code for maintainability reasons
Fixed an issue where line of sight checks for dynamic items would fail
Fixed an issue where items being picked up by a player would not be added to the correct mapregion if bouncing back to its original location when dropped
Fixed an issue where NPC spellcasters would damage/kill themselves by attempting to cast Mind Blast at their target. Now they'll only cast this if they're actually smarter than their target
Fixed an issue where NPC spellcasters would damage and kill members of their own species/ai/race via AoE spells
Fixed an issue where the max spellcast range defined in UOX.INI was off for NPCs by 1 tile
Added spoken words of power for spells cast by human NPCs
Fixed an exploit with the Dispel Field spell
Admins and GMs are no longer dispellable...
Fixed a bug where spell effects would get stuck on caster if they cast a spell with a moving effect at themselves
Added two new NPC AI types that can be used for NPCs that are primarily casters:
AI_CASTER (10) // Same as AI_FIGHTER (5), but will try to stay at casting range
AI_EVIL_CASTER (11) // Same as AI_EVIL (2), but will try to stay at casting range
Changed the NPCAI tags of some NPCs from 5 to 10 and from 2 to 11
Added some visual flair to let NPCs play idle/fidget animations from time to time
Added some visual flair to let NPCs play casting animations when using magic spells
Added support for new tags in creatures.dfn to define some animation behaviour for non-player creatures in combat (ANTIBLINK tag no longer needed):
ANIM_CASTAREA=#,frameCount // Animation to use when casting area-targeted spells
ANIM_CASTTARGET=#,frameCount // Animation to use when casting target-based spells
ANIM_ATTACK1=#,frameCount // First attack animation
ANIM_ATTACK2=#,frameCount // (optional) Second attack animation
ANIM_ATTACK3=#,frameCount // (optional) Third attack animation
Updated creatures.dfn with entries for all known creatures in the UO client, as well as icons, sounds and combat/casting animations for all of those.
Fixed an issue with creature DFN setup for Elf ghosts which prevented paperdoll context menu from working
Added new JS Events:
onCarveCorpse( pUser, iCorpse ) // Triggers for iCorpse when being carved by pUser
onFacetChange( mChar, oldFacet, newFacet ) // Triggers for character when moving between facets
onDyeTarget( pUser, dyeTub, targItem ) // Triggers for dyeTub when player tries dying an item
Added new JS Functions to create houses (from house.dfn) and base multis (using raw multi IDs):
CreateHouse( houseID, x, y, z, worldNum, instanceID );
CreateBaseMulti( multiID, x, y, z, worldNum, instanceID );
Added new JS Character/Item Method:
.HasScriptTrigger( scriptID ) // Returns true if script with scriptID is present on object
Added new JS commands for GMs in js/commands/custom/misc-cmd.js
'addhouse houseID // Add house from house.dfn at target location
'addmulti multiID // Add base multi from client multi files at target location
Added new INI settings:
SHOWRACEWITHNAME=1 // If enabled, shows a character's race along with their name. Defaults to 1
SHOWITEMRESISTSTATS=0/1 // If enabled, shows item resistance stats in item tooltip. Defaults to 0
SHOWWEAPONDAMAGETYPES=1/0 // If enabled, shows weapon damage types in item tooltip. Defaults to 1
CASTSPELLSWHILEMOVING=0/1 // If enabled, players can cast spells while moving, without having to stop
SHOWREPUTATIONTITLEINTOOLTIP=1/0 // If enabled, shows player's reputation title in tooltip. Defaults to 1
SHOWGUILDINFOINTOOLTIP=1/0 // If enabled, shows player's guild info in tooltip. Defaults to 1
SHOWRACEINPAPERDOLL=1/0 // If enabled, shows a character's race in the paperdoll. Defaults to 1
SHOWNPCTITLESINTOOLTIPS=1/0 // If enabled, shows NPC titles in tooltip. Defaults to 1
Renamed 0xf1_connectUOServerPoll.js to 0xf1_freeshardServerPoll.js, and updated script to respond to the "standard" freeshard server poll request rather than the more specific (and now dead) ConnectUO one.
Renamed INI setting CUOENABLED to FREESHARDSERVERPOLL
Added new INI settings under [expansion settings] section to help shard admins customize some key behaviours of their shard, based on their preferred "era" of UO. Note that a value of "core" means the setting inherits the chosen era from the CORESHARDERA setting:
CORESHARDERA=lbr
Defines the "core" era of the shard. Defaults to pub15 (Publish 15).
any - determines which Item/NPC DFNs gets loaded, based on tags like GETT2A, GETPUB15
uor or later - enables bonus hit chance for archery via ARCHERYHITBONUS setting
lbr or earlier - final combat damage value reduced by half
ARMORCALCULATION=core
Defines era to base armor calculations on
lbr or earlier - different armor pieces contribute different percentage of the total Armor Rating
aos or later - each armor piece contribute to sum total of Physical Resistance, and other elemental resistance stats
STRENGTHDAMAGEBONUS=core
Defines era to base strength damage bonus on
uor or earlier - 20% damage bonus based on strength, capped at 200 strength
td or later - 35% damage bonus based on strength if 100 strength or more, otherwise 30% damage bonus
TACTICSDAMAGEBONUS=core
Defines era to base tactics damage bonus on
lbr or earlier - bonus = Tactics skill + 50
aos or later - 68.75% damage bonus if GM Tactics, 62.5% bonus if below
ANATOMYDAMAGEBONUS=core
Defines era to base anatomy damage bonus on
uor or earlier - bonus = Anatomy / 5 vs NPCs, Anatomy / 2.5 vs Players
td or later - 30% damage bonus at GM anatomy, up to 20% below GM
ml or later - 50% + 5 damage bonus at GM anatomy, up to 50% below GM
LUMBERJACKDAMAGEBONUS=core
Defines era to base lumberjacking damage bonus on
uor or earlier - 35% damage bonus at GM skill, up to 25% below GM
td or later - 30% damage bonus at GM skill, up to 20% below GM
hs or later - 10% chance of 100% damage bonus
RACIALDAMAGEBONUS=core
Defines era to base racial damage bonus on
sa or later - Gargoyles gain +15% damage bonus per each 20 HP lost
DAMAGEBONUSCAP=core
Defines era to base damage bonus cap on
lbr or earlier - No cap on damage bonus multiplier
aos or later - Total damage bonus multiplier capped at 300% higher than base damage
SHIELDPARRY=core
Defines era to base shield parry calculations on
t2a - chance to block is parryskill / 2. shield absorbs damage equivalent of AR/2 for melee, or equivalent of AR for archery
uor to lbr - higher AR equals lower block chance, but more damage absorbed.
aos or later - chance to block dependent on parry skill vs bushido skill, with dex modifier
WEAPONPARRY=core
Defines era to base weapon parry calculations on
aos or later - chance to parry with weapon based on parry skill and bushido skill, with a dex modifier, 16.6% chance weapon will take damage from parrying
ml or later - chance to parry with weapon based on parry skill and bushido skill, with a dex modifier, 5% chance weapon will take damage from parrying, or 75% if opponent has mace
WRESTLINGPARRY=core
Defines era to base wrestling parry calculations on
tol or later - From 12.5% chance (at GM wrestling, increases with higher skill) that an NPC will parry an attack
COMBATHITCHANCE=core
Defines era to base combat hit chance calculations on
t2a to lbr - hit chance based on attacker's skill vs defender's skill. No minimum chance to hit