Skip to content

Update properties sent to client - #4258

Merged
LtRipley36706 merged 7 commits into
ACEmulator:masterfrom
OptimShi:AppraisalProps
Jan 15, 2025
Merged

LtRipley36706 merged 7 commits into
ACEmulator:masterfrom
OptimShi:AppraisalProps

Conversation

@OptimShi

Copy link
Copy Markdown
Collaborator

Cleans up the properties sent to the client on login and appraisal. Based on PCaps and client information, an adjustment of these properties has been done to ensure ACE is not sending more information than the client needs. Fixes some potential exploits in addition to wasted bandwidth.

Removed some unused property attributes and functions while it was being cleaned up. All properties are now what formerly were tagged [ServerOnly] unless they have the [SendOnLogin] or [AssessmentProperty].

Note that many properties are no longer tagged with the AssessmentProperty attribute because they are, and always have been, sent elsewhere (e.g. in the CreateObject message or in Armor or Weapon profile part of the AppraiseInfo message)

This will undoubtedly "break" some post-retail plugins/tools that were using some of this extended data, but the client should never have had this data to begin with.

Comment thread Source/ACE.Entity/Enum/Properties/PropertyDataId.cs Outdated
Comment thread Source/ACE.Entity/Enum/Properties/PropertyFloat.cs Outdated
Comment thread Source/ACE.Entity/Enum/Properties/PropertyInstanceId.cs Outdated
Comment thread Source/ACE.Entity/Enum/Properties/PropertyInt.cs Outdated
Comment thread Source/ACE.Entity/Enum/Properties/PropertyInt64.cs Outdated
Comment thread Source/ACE.Entity/Enum/Properties/PropertyString.cs Outdated
Comment thread Source/ACE.Entity/Enum/Properties/PropertyBool.cs Outdated
gmriggs
gmriggs previously approved these changes Dec 24, 2024
gmriggs
gmriggs previously approved these changes Dec 24, 2024
LtRipley36706
LtRipley36706 previously approved these changes Dec 29, 2024
Comment thread Source/ACE.Entity/Enum/Properties/PropertyInt.cs
@OptimShi
OptimShi dismissed stale reviews from LtRipley36706 and gmriggs via 7fa0e3c December 31, 2024 23:05
@LtRipley36706
LtRipley36706 merged commit 10fac6b into ACEmulator:master Jan 15, 2025
WarlockHolmez pushed a commit to daralet-ac/ACE that referenced this pull request Oct 7, 2026
Appraisals used to send every property not marked [ServerOnly] (a
blocklist). They now send only properties tagged [AssessmentProperty], and
the login PlayerDescription Int64 properties now use [SendOnLogin] like the
other property types (an allowlist), matching upstream ACEmulator#4258.

- Retail properties take upstream's pcap-verified [AssessmentProperty] /
  [SendOnLogin] tags. [Ephemeral] (persistence) is unchanged.
- The fork's own properties keep their current behavior: those that were
  sent before are tagged [AssessmentProperty], those marked [ServerOnly]
  are not.
- WeaponOffense, SlayerDamageBonus and ProcSpellRate stay tagged because
  this server's custom appraisal text reads them.
- AppraisalHasAllowedWielder/Activator and the DefaultLocked unlocked state
  now read from the object, since those properties are no longer in the
  appraisal property bags (upstream ACEmulator#4474, ACEmulator#4475).
- Remove ClientProperties, ServerOnlyProperties and ServerOnlyAttribute.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LDKfgWjXHL7EKz8foWrd5e
WarlockHolmez added a commit to daralet-ac/ACE that referenced this pull request Oct 7, 2026
…m upstream ACE (#1284)

* Port exploit and security fixes from upstream ACEmulator/ACE

- Block allegiance mansion recall / house actions targeting an Apartment
  (HouseType < Villa let Apartment through) - upstream ACEmulator#4330
- Clear a stale IsAdvocate flag left over from a former Advocate account
  access level; command access trusts this flag - upstream ACEmulator#4502
- Make acehelp lookups case-insensitive, stop the console command thread
  when stdin is closed instead of spinning, and tidy reportbug/house-select
  - upstream ACEmulator#4502
- Re-check split amount with <= after the walk/pickup delay so a stack that
  shrank meanwhile cannot be split down to a zero-size source - upstream ACEmulator#4434
- Refuse attribute transfers while wielding items with attribute, vital or
  skill wield requirements; refuse lowering a skill below an equipped item's
  Training requirement; enforce ItemSpecializedOnly - upstream ACEmulator#4476
- Treat invincible creatures (not just players) as immune to spell
  projectiles, DoTs and spells; fix inverted fellow_kt_killer check; pass
  isWeaponSpell for new enchantment layers; trigger exhaustion when stamina
  hits 0 from an overdraw - upstream ACEmulator#4501
- Restrict GetMultiplicativeMod(PropertyFloat) to Float single-stat
  enchantments so other stat keys can't collide - upstream ACEmulator#4479
- Hotspots skip dead creatures and Health-type hotspots kill at 0 health
  - upstream ACEmulator#4408

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LDKfgWjXHL7EKz8foWrd5e

* Port bug fixes from upstream ACEmulator/ACE

- Cache ServerVersion.AutoDetect per connection string instead of opening an
  extra connection for every DbContext - upstream ACEmulator#4256
- Deep-copy book pages when creating a biota from a weenie, and return the
  correct index from AddPage - upstream ACEmulator#4470
- GDLE/Lifestoned adapter fixes (IID requirements, spellbook dedupe, emote
  Display/Amount64, empty cookbooks, IgnoreAuthor) - upstream ACEmulator#4470, ACEmulator#4471
- TimedEventHistory divide-by-zero / shortest event, drain the serialized
  shard queue fully, avoid double Destroy on generator reset - upstream ACEmulator#4471
- Treat Fellow* spells missing the FellowshipSpell flag (Kiss of the Grave,
  etc.) as fellowship spells - upstream ACEmulator#4425
- Null guards for Position distance helpers, fellowship full update and
  body part tables; WeenieClassName no longer throws for deleted weenies
  - upstream ACEmulator#4341, ACEmulator#4303
- Force log off characters stuck logging out for 15 minutes (only if that
  same player object is still online) - upstream ACEmulator#4175
- Support negative HealOverTime spells (record damage, harm message, death)
  - upstream ACEmulator#4304
- Set the slumlord ParentLink when loading a house and show purchase items
  as paid for owned houses - upstream ACEmulator#4238
- Fix jump_is_allowed null/creature check - upstream ACEmulator#4473
- Dat reader ends on the last sector via the next-sector pointer rather
  than size < blockSize - upstream ACEmulator#4275
- Give failure message shows the amount offered, not the whole stack
  - upstream ACEmulator#4486

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LDKfgWjXHL7EKz8foWrd5e

* Port HighRes DAT support from upstream ACEmulator/ACE

Adds the allow_highres_dat server property (off by default). When enabled,
the DDD interrogation advertises highres support (product id 0x4) so
clients use client_highres.dat, and the server validates and patches the
client's highres iterations like the other dats. The highres dat shares
DatFileId 1 with the portal dat, so interrogation responses are now told
apart by DatFileType ("HiFi").

Clients reporting 0 iterations for the cell or highres dat are no longer
treated as missing iterations (cells are downloaded on demand; a client
without the highres dat just doesn't use it).

Highres iterations are only built at startup when client_highres.dat is
present in the dat folder.

Upstream ACEmulator#4469

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LDKfgWjXHL7EKz8foWrd5e

* Port property allowlist for client appraisal/login from upstream

Appraisals used to send every property not marked [ServerOnly] (a
blocklist). They now send only properties tagged [AssessmentProperty], and
the login PlayerDescription Int64 properties now use [SendOnLogin] like the
other property types (an allowlist), matching upstream ACEmulator#4258.

- Retail properties take upstream's pcap-verified [AssessmentProperty] /
  [SendOnLogin] tags. [Ephemeral] (persistence) is unchanged.
- The fork's own properties keep their current behavior: those that were
  sent before are tagged [AssessmentProperty], those marked [ServerOnly]
  are not.
- WeaponOffense, SlayerDamageBonus and ProcSpellRate stay tagged because
  this server's custom appraisal text reads them.
- AppraisalHasAllowedWielder/Activator and the DefaultLocked unlocked state
  now read from the object, since those properties are no longer in the
  appraisal property bags (upstream ACEmulator#4474, ACEmulator#4475).
- Remove ClientProperties, ServerOnlyProperties and ServerOnlyAttribute.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LDKfgWjXHL7EKz8foWrd5e

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants