TrinityCore / TrinityCore/TrinityCore

GameObjectDisplayCondition.db2 Support

Open
#30,483 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Branch-master
Dominant language
C++
Stars
10.8k
Forks
6.4k
Avg merge
3d 16m
Merged PRs (30d)
6

Description

Description

Since TWW the Holidays GameObject in Dornogal have a dynamic DisplayId and a single spawn, nothing handle that.
This system also handle the end chests in Delves.

For the exemple i will use the GameObject 454734 named HDressing 2.0 - Standing, Banner01 - Trial of Style/Noblegarde/Children/Pilgrim/Midsummer/Brewfest - JZB
the name itself show one gameobject have multiple purpose

How it's working db2 wise:

https://wago.tools/db2/GameObjectDisplayCondition?build=11.0.2.56311&filter[GameObjectID]=454734&page=1&sort[Field_10_2_7_54171_002]=desc

Few field here can be named;

Field_10_2_7_54171_001: Containt the DisplayId of the gameobject (we can confirm it by sniffing each event on retail)
Field_10_2_7_54171_002: is a WorldStateExpressionId (credit to @meji46 and @Nyr97 ) (see under for values)
Field_10_2_7_54171_003: Unknow purpose, only a field have something else than 0 and it look like a dev test
Field_10_2_7_54171_004: Float value may related to a size override

Guesed values of the WorldSate:
How ?

Knowing the field Field_10_2_7_54171_001 is a DisplayId we can search it in GameObjectDisplayInfo.db2
https://wago.tools/db2/GameObjectDisplayInfo?build=11.0.2.56311&filter[ID]=91502&page=1
this DB2 link the DisplayId to a FileDataId
https://wago.tools/files?build=11.0.2.56311&search=5282591

world/expansion09/doodads/festival/10xp_childrensweek_bannerstanding01.m2

By doing that on all DisplayId matching the WorldStateExpressionId we can deduce the names based on the file naming

1368 = xmas ((GetWorldStateValue(841)) == (1))
2016 = easter ((GetWorldStateValue(1350)) == (1))
2174 = childrensweek ((GetWorldStateValue(1472)) == (1))
3555 = summerfest (GetWorldStateValue(2286))
4546 = beerfest ((GetWorldStateValue(3010)) > (0))
6572 = thanksgiving ((GetWorldStateValue(4009)) > (0)) | ((GetWorldStateValue(4014)) > (0))
7523 = valentinesday ((GetWorldStateValue(4488)) == (1))
22303 = masquerade ((GetWorldStateValue(13445)) == (1))

not holiday related
42057/42058 
43337 = nerubian
43338 = kobyss
43339 = rootlands
43340 = arathor
43341 = kobold
43366 = nerubian

From Firestorm-servers team, with love

Expected behaviour

.

Steps to reproduce the problem

.

Branch

master

TC rev. hash/commit

508396c

Operating system

None

Custom changes

None

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the GameObjectDisplayCondition.db2 and GameObjectDisplayInfo.db2 data linked in the issue, including the listed WorldStateExpressionId values and display IDs. Trace how GameObjects currently select display data and world-state conditions; done should mean the holiday and Delves cases can use the appropriate dynamic display and single spawn. No source file, test, or concrete expected behavior is named.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
backend, game-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.