Commit graph

3483 commits

Author SHA1 Message Date
68802df7e2 #W# Spawn: Lots of spawn work and tweaks. 2026-11-02 14:19:47 -05:00
488fa12039 #W# Citizens: Added more monster types and more custom dialog. 2026-11-02 11:23:21 -05:00
75243a4f13 #W# Work: Working on signs ugh. 2026-11-01 14:20:11 -05:00
22ffccfec4 #W# Added: OzThoth Static Gump. 2026-11-01 12:52:57 -05:00
55aada83d4 #W# Added: Town gathering spots for citizens. 2026-11-01 10:53:29 -05:00
d05a274ba6 #W# Added: Made a dynamic citizen spawner that only spawns them on roads and dirt. 2026-10-31 15:35:38 -04:00
ae245cdb69 #W# Fix: CrystalOfKnowlege no longer drops crafting skills. 2026-10-31 13:10:04 -04:00
822e82f12b #W# Citizens: Basic idea for citizens that walk around and talk. 2026-10-31 12:45:44 -04:00
69a2b8772b #W# Bosses: Working on Dungeon Bosses. Added some reward drops to increase stat/skill/totalskill cap. 2026-10-31 12:44:45 -04:00
00c25cd506 #W# New: Portal Spawner that spawns a mob. if the mob doesn't have a combatant after 3 mins it despawns. 2026-10-30 21:04:26 -04:00
21a4cc1ce5 #W# Spawn: Spawning some of the new creatures. 2026-10-30 20:16:36 -04:00
63b29bfc0d #W# Mobs: Tweaked some mob stats. 2026-10-30 14:38:33 -04:00
fbda425fee #W# Mobs: Still working on adding some new mobs. 2026-10-30 14:14:38 -04:00
5bdc30d7ea #W# New: Working on adding new mobs. 2026-10-29 18:52:00 -04:00
ec8264feb0 #W# New: Added a bunch of monster animations. 2026-10-29 17:07:09 -04:00
1b1d7eaf86 #W# Tweak: Cave toads are no longer aggressive. 2026-10-29 10:40:33 -04:00
0daf369b33 #W# Bosses: Working on Dungeon Bosses. Summon Items and Alters. 2026-10-28 18:58:52 -04:00
76e38ff3f7 #W# Crafting: Did some crafting queue polishing. 2026-10-28 15:27:09 -04:00
712247762c #W# Craft: Added a nice crafting queue system. To access the queue there is a button on the bottom right. Under the Skill Guide. 2026-10-28 12:21:59 -04:00
0fa220bb63 #W# Region: Region Tweak. 2026-10-27 20:02:54 -04:00
f6f50470a9 #W# Merge: Merged with upstream. Conflicts resolved. 2026-10-27 19:56:03 -04:00
cc59a8ca72 #W# Craft: Arms Lore now gives execptional armor 5 more resists. Weapons now cap at 25% DI, but Arms Lore can push it up to 35%. 1% Per 10 skill points. 2026-10-27 19:50:32 -04:00
0c1cf1b50f #W# Dashboard: Fixed the bandage speed forumula. 2026-10-27 17:39:35 -04:00
c3c9637d3d #W# Gumps: Added a Dashboard command that opens a gump and shows all your stats. 2026-10-27 15:06:18 -04:00
f0404c002a #W# Spawn: Tweaked A New Player Dungeon spawn. 2026-10-27 12:05:32 -04:00
4bb465831a #W# Fix: Typo fix. 2026-10-27 11:44:04 -04:00
79dc019789 #W# Work: Just doing some simple work stuff. 2026-10-27 11:41:29 -04:00
e0bb3b72fa #W# Prof: Tweaked starting Profiles. 2026-10-26 19:13:05 -04:00
2854145287 #W# Spawn: Tweaked A New Player Dungeon spawn. 2026-10-26 18:45:07 -04:00
a174a0a8d7 #W# Spawn: Dungeon Crates spawned. 2026-10-26 18:04:11 -04:00
4681994233 #W# Restructure: Moved some files around. 2026-10-26 13:34:51 -04:00
6f6042b809 #W# Removed: Got ride of stock treasurechest and dungeon trap spawners in favor of the new systems. 2026-10-26 13:19:14 -04:00
aedf8d276f #W# Treasure: DungeonBags/Crates. Bags are trapped level 0-3 loot. Crates are trapped and locked with level 4-6 loot. 2026-10-26 12:26:54 -04:00
Kamron Batman
5570537aa0
fix: anchored times shift only while still running at save start (#2730)
Follow-up to #2729.

## Problem

At load, `ReadAnchoredTime` shifted **every** anchored value forward by the downtime, including values that were already in the past when the save started. That caused two problems.

**An expired deadline came back.** A deadline that passed 5 minutes before a 30-minute outage loaded 25 minutes in the future. For example:
- `Sheep.NextWoolTime`: a sheep that was ready to shear stopped being ready.
- `PlayerVendor.NextPayTime`: an overdue payment was pushed back.
- `BaseCreature.SummonEnd`, the spell fields' `End`, `TransientItem.Expiration`, and the ChampionSpawn times could move the same way.

**Records were rewritten for nothing.** The first save after every restart rewrote:
- stamps of things that had already happened: VirtueContext's `LastHonorUse`, `LastSacrificeGain`, the four `Last*Loss` stamps, and `Corpse.TimeOfDeath`
- every deadline that had expired long ago.

## Change

- **`IGenericReader.AnchoredTimeOrigin`** is the loaded save's start time.
  - `GenericEntityPersistence` and `GenericPersistence` set it from `World.LoadedSaveStartTime`.
  - `BufferReader`, `UnmanagedDataReader` and `BinaryFileReader` expose it.
- **`ReadAnchoredTime` returns any value at or before the origin exactly as saved.**
  - A deadline still running at save start is shifted as before and keeps its remaining time.
  - Readers without an origin keep the old behaviour.
- **This covers every anchored field, including generated ones.** Generated `[AnchoredDateTime]` fields call `reader.ReadAnchoredTime()`, so the one change covers all 26 generated fields as well as the manual reads. `[DeserializeTimer]` only restores timers that were running at save time, so it is unaffected.
- **The `[AnchoredDateTime]` section of `dev-docs/serialization.md` and the `WriteAnchoredTime` doc comment describe the new rule.**

## Behaviour change

Downtime now counts toward windows measured from a past stamp:

| Window | Length |
|---|---|
| Honor use | 5 minutes |
| Sacrifice gain | 1 day |
| Virtue atrophy | 7 days |
| Instanced corpse looting | 3 minutes |

A 30-minute outage makes a 7-day atrophy fire about 0.3% sooner. No format change.

## Tests

New tests in `AnchoredTimeTests`:
- A deadline running at save start keeps its remaining time.
- A deadline that passed before save start stays passed.
- A past stamp is not shifted.
- A value exactly at save start is not shifted.

`Server.Tests`: 845 passed. `UOContent.Tests`: 1140 passed.
2026-10-25 16:44:33 -07:00
Kamron Batman
9af7dd555a
fix: LastMoved and stat-gain stamps stay absolute across restarts (#2729)
ReadAnchoredTime shifted Item.LastMoved, Item.DecayResetTime and
Mobile.LastStr/Int/DexGain forward by the downtime at load. The bytes
were stable from save to save, but the first save after every restart
rewrote one timestamp in nearly every item record and most mobile
records, which defeats any per-record backup or delta save.

- LastMoved and DecayResetTime are read as saved. The downtime credit
  is applied after load by Item.CreditDowntimeToDecay, which moves
  DecayResetTime only for items whose decay countdown was still running
  when the save started. Every other item keeps its bytes, and decay
  timing is unchanged.
- World.LoadedSaveStartTime exposes the loaded save's anchor so the
  credit can tell which countdowns were running.
- Stat-gain stamps are read raw. The cooldown is minutes long, so
  downtime counting toward it costs nothing.

No format change: these fields were already absolute ticks.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:27:12 -07:00
9704edebc9 #W# Pedestals: ThiefPedestal tweak and spawns set. 2026-10-25 18:52:23 -04:00
4007f4c347 #W# Skill: Stats now give skill points to some skills. 2026-10-24 19:56:25 -04:00
9fc06bfe93 #W# Loot: Removed TreasureBag Spawns for now. 2026-10-24 17:52:38 -04:00
bc3c5143b9 #W# Rework: Complete rework of ThiefPedestals. 2026-10-24 17:45:20 -04:00
dependabot[bot]
ab59efea86
fix: Bump MailKit from 4.18.1 to 4.18.2 (#2727)
---
updated-dependencies:
- dependency-name: MailKit
  dependency-version: 4.18.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-23 20:22:24 -07:00
LoveDesignUA
302f1ad988
fix: Moving Shot only charges mana for a fired shot (#2726)
Moving Shot charged its mana in `OnBeforeSwing`, before `BaseRanged.OnSwing` decided whether to fire. A swing that fired nothing (a paralyzed or frozen archer, no ammo, a failed harmful check) still took the mana and left the move armed. Every swing after that charged again, so inside the 3-second window you paid twice, until the archer ran out of mana.

`OnBeforeSwing` now only checks the mana. Moving Shot's own `OnHit`/`OnMiss` charge it, and those only run once a shot has fired. This is how the other weapon abilities pay. A miss still costs mana. A parried shot no longer does: the parry clears the move before `OnHit` runs, the same as for every other ability.
2026-10-23 20:21:36 -07:00
a440cb72d1 #W# Loot: Messing around with a random loot generating bag. 2026-10-23 20:57:31 -04:00
7e8e8cf3f5 #W# Misc: Moved around a few npc vendors. 2026-10-23 18:55:33 -04:00
6255cf8814 #W# Era: Changed from UOR back to AOS. 2026-10-23 17:19:42 -04:00
fc38c54767 #W# Added: New Skill guide button added to the crafting menu. 2026-10-23 14:38:01 -04:00
92af75f796 #W# Change: Ore now gets smelted 1 at a time instead of the whole stack. Gain chance on each attempt. 2026-10-23 13:09:04 -04:00
4e4391e1dd #W# Region: Region Tweak. 2026-10-22 15:48:08 -04:00
6cd2f766da #W# Added: New player area at the entrance of the dungeon. Added some npcs. 2026-10-22 14:23:16 -04:00
48358c80df #W# Dungeon: New player dungeon is spawned and ready to go. 2026-10-22 13:04:47 -04:00
7ddbb1efde #W# Dungeon: Changed the New Player Dungeon. 2026-10-22 10:53:08 -04:00