Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request] Provide a mechanism for actors like summons / familiars / companions / mounts to provide a reference back to another actor which owns or summoned them. #893

Closed
aaclayton opened this issue Dec 21, 2020 · 0 comments · Fixed by #3235

Comments

@aaclayton
Copy link
Contributor

Originally in GitLab by @thingscouldgetdicey1

lots of classes involved in dnd 5e need to have the abilty to be able to reference a players abilities. such as an artificer who needs the cannon to have 5x the hp of the lvl in artificer. or the beast master who needs to alter the AC according to the proficiency bonus of the player character. and other npcs using the actors proficiency for attack bonuses as with the wildfire spirit for wildfire druids. echo knights echo calculates the AC based off the proficiency level of the echo knight. there are lots more examples i could find where this is applicable.
if these could be systemically added it would be less book keeping. as this could be added via a ddb importer to be automated if there was a mechnical systemic way of this to be referenced. maybe this could be a feature if npcs are made friendly.
if we could reference spell DC of the original actor that would be great too. please let me know if this would be possible.

@arbron arbron self-assigned this Feb 21, 2024
@arbron arbron added this to the D&D5E 3.1.0 milestone Feb 21, 2024
arbron added a commit that referenced this issue Feb 29, 2024
[#893] Add data model & configuration data for summoning
arbron added a commit that referenced this issue Mar 6, 2024
[#893] Add summoning to item activation workflow
arbron added a commit that referenced this issue Mar 8, 2024
Moves the summoning data into an `EmbeddedDataField` to allow for
the summoning methods to be defined there rather than taking up a
bunch of space in `ActionTemplate`.

Introduces `SummonsData#summon` method which takes the ID of a
summoning profile and proceeds through the process of summoning the
actor:

1) Fetches the actor to summon based on the profile. This will
eventually need some extra work to handle summoning from compendiums.

2) Minimizes the actor sheet (if open) and determine placement on
scene. Currently the placement is a placeholder method that just
places the summons in a fixed position.

3) Iterates over all token placements, requesting updates that will
be made to the actor and its contained items for each placement.

 - Match proficiency is applied using an active effect

 - AC bonus is applied to `ac.flat` value if calc is `flat`, otherwise
   it uses an active effect to apply to `ac.bonus`

 - HP bonus is applied to `hp.max` unless summoned creature is a PC
   without an overriden maximum HP, in which case it uses an effect

 - Match attacks calculates the to hit based on the ability specified
   on the summoning item. It fetches attack bonuses from the summoner,
   but it uses spell bonuses in place of weapon bonuses

 - Match save simply swaps to flat scaling mode with the DC from the
   item or the summoner's spell DC.

4) Synthesizes token data with the updates.

5) Once all tokens are ready, maximizes the sheet if it was previously
minimized and creates token documents on the scene.
arbron added a commit that referenced this issue Mar 8, 2024
Moves the summoning data into an `EmbeddedDataField` to allow for
the summoning methods to be defined there rather than taking up a
bunch of space in `ActionTemplate`.

Introduces `SummonsData#summon` method which takes the ID of a
summoning profile and proceeds through the process of summoning the
actor:

1) Fetches the actor to summon based on the profile. This will
eventually need some extra work to handle summoning from compendiums.

2) Minimizes the actor sheet (if open) and determine placement on
scene. Currently the placement is a placeholder method that just
places the summons in a fixed position.

3) Iterates over all token placements, requesting updates that will
be made to the actor and its contained items for each placement.

 - Match proficiency is applied using an active effect

 - AC bonus is applied to `ac.flat` value if calc is `flat`, otherwise
   it uses an active effect to apply to `ac.bonus`

 - HP bonus is applied to `hp.max` unless summoned creature is a PC
   without an overriden maximum HP, in which case it uses an effect

 - Match attacks calculates the to hit based on the ability specified
   on the summoning item. It fetches attack bonuses from the summoner,
   but it uses spell bonuses in place of weapon bonuses

 - Match save simply swaps to flat scaling mode with the DC from the
   item or the summoner's spell DC.

4) Synthesizes token data with the updates.

5) Once all tokens are ready, maximizes the sheet if it was previously
minimized and creates token documents on the scene.
arbron added a commit that referenced this issue Mar 8, 2024
Moves the summoning data into an `EmbeddedDataField` to allow for
the summoning methods to be defined there rather than taking up a
bunch of space in `ActionTemplate`.

Introduces `SummonsData#summon` method which takes the ID of a
summoning profile and proceeds through the process of summoning the
actor:

1) Fetches the actor to summon based on the profile. This will
eventually need some extra work to handle summoning from compendiums.

2) Minimizes the actor sheet (if open) and determine placement on
scene. Currently the placement is a placeholder method that just
places the summons in a fixed position.

3) Iterates over all token placements, requesting updates that will
be made to the actor and its contained items for each placement.

 - Match proficiency is applied using an active effect

 - AC bonus is applied to `ac.flat` value if calc is `flat`, otherwise
   it uses an active effect to apply to `ac.bonus`

 - HP bonus is applied to `hp.max` unless summoned creature is a PC
   without an overriden maximum HP, in which case it uses an effect

 - Match attacks calculates the to hit based on the ability specified
   on the summoning item. It fetches attack bonuses from the summoner,
   but it uses spell bonuses in place of weapon bonuses

 - Match save simply swaps to flat scaling mode with the DC from the
   item or the summoner's spell DC.

4) Synthesizes token data with the updates.

5) Once all tokens are ready, maximizes the sheet if it was previously
minimized and creates token documents on the scene.
arbron added a commit that referenced this issue Mar 8, 2024
Adds a `SummonsData#canSummon` property that determines whether a
scene is open and whether the user has permissions to summon. If not,
then no summoning control is displayed in the `AbilityUseDialog` and
the chat button is removed.

If user is trying to summon and actor that they do not have ownership
of the will be shown an error.

Also introduces a check for file browser permission when creating
token data if the token is set to use a wildcard image. If the user
lacks permission here, then the token will fall back to using the
portrait image and a warning will be displayed in the console.

Adds a new `SummonsData#fetchActor` data which handles locating the
actor to be summoned. If the actor is in the world, then it just
returns that version. If the associated actor is in a compendium, it
will first search through world actors to find one with a matching
`sourceId` and the `dnd5e.summonedCopy` flag set, summoning from the
pre-imported version if available. Only then will it fall back on
importing the actor from the compendium so long as the user has
permission to do so.
arbron added a commit that referenced this issue Mar 8, 2024
Moves the summoning data into an `EmbeddedDataField` to allow for
the summoning methods to be defined there rather than taking up a
bunch of space in `ActionTemplate`.

Introduces `SummonsData#summon` method which takes the ID of a
summoning profile and proceeds through the process of summoning the
actor:

1) Fetches the actor to summon based on the profile. This will
eventually need some extra work to handle summoning from compendiums.

2) Minimizes the actor sheet (if open) and determine placement on
scene. Currently the placement is a placeholder method that just
places the summons in a fixed position.

3) Iterates over all token placements, requesting updates that will
be made to the actor and its contained items for each placement.

 - Match proficiency is applied using an active effect

 - AC bonus is applied to `ac.flat` value if calc is `flat`, otherwise
   it uses an active effect to apply to `ac.bonus`

 - HP bonus is applied to `hp.max` unless summoned creature is a PC
   without an overriden maximum HP, in which case it uses an effect

 - Match attacks calculates the to hit based on the ability specified
   on the summoning item. It fetches attack bonuses from the summoner,
   but it uses spell bonuses in place of weapon bonuses

 - Match save simply swaps to flat scaling mode with the DC from the
   item or the summoner's spell DC.

4) Synthesizes token data with the updates.

5) Once all tokens are ready, maximizes the sheet if it was previously
minimized and creates token documents on the scene.
arbron added a commit that referenced this issue Mar 8, 2024
Adds a `SummonsData#canSummon` property that determines whether a
scene is open and whether the user has permissions to summon. If not,
then no summoning control is displayed in the `AbilityUseDialog` and
the chat button is removed.

If user is trying to summon and actor that they do not have ownership
of the will be shown an error.

Also introduces a check for file browser permission when creating
token data if the token is set to use a wildcard image. If the user
lacks permission here, then the token will fall back to using the
portrait image and a warning will be displayed in the console.

Adds a new `SummonsData#fetchActor` data which handles locating the
actor to be summoned. If the actor is in the world, then it just
returns that version. If the associated actor is in a compendium, it
will first search through world actors to find one with a matching
`sourceId` and the `dnd5e.summonedCopy` flag set, summoning from the
pre-imported version if available. Only then will it fall back on
importing the actor from the compendium so long as the user has
permission to do so.
arbron added a commit that referenced this issue Mar 11, 2024
The `TokenPlacement` class right now is small and only delegates
to the `TokenPlacementTemplate` which is responsible for rendering
and returning placement information. With the V12 improvements to
placeables hopefully we'll be able to shift more logic out of the
`MeasuredTemplate` subclass and into the `TokenPlacement` class.

The `TokenPlacementConfiguration` data structure currently just
includes the prototype token information, but will eventually have
quantity, origin, and range values to handle multiple summons and
restricting range from the summoner.

Works with tokens of any size or scale on the square grid. On hex
grids, it handles 1x1 tokens pretty good with only a bit of offset
on the final token placement. Stranger token sizes lead to some
issues with positioning, but I'm not sure how important those are
to fix before the other grid improvements in V12.
arbron added a commit that referenced this issue Mar 13, 2024
Adds a `SummonsData#canSummon` property that determines whether a
scene is open and whether the user has permissions to summon. If not,
then no summoning control is displayed in the `AbilityUseDialog` and
the chat button is removed.

If user is trying to summon and actor that they do not have ownership
of the will be shown an error.

Also introduces a check for file browser permission when creating
token data if the token is set to use a wildcard image. If the user
lacks permission here, then the token will fall back to using the
portrait image and a warning will be displayed in the console.

Adds a new `SummonsData#fetchActor` data which handles locating the
actor to be summoned. If the actor is in the world, then it just
returns that version. If the associated actor is in a compendium, it
will first search through world actors to find one with a matching
`sourceId` and the `dnd5e.summonedCopy` flag set, summoning from the
pre-imported version if available. Only then will it fall back on
importing the actor from the compendium so long as the user has
permission to do so.
arbron added a commit that referenced this issue Mar 13, 2024
The `TokenPlacement` class right now is small and only delegates
to the `TokenPlacementTemplate` which is responsible for rendering
and returning placement information. With the V12 improvements to
placeables hopefully we'll be able to shift more logic out of the
`MeasuredTemplate` subclass and into the `TokenPlacement` class.

The `TokenPlacementConfiguration` data structure currently just
includes the prototype token information, but will eventually have
quantity, origin, and range values to handle multiple summons and
restricting range from the summoner.

Works with tokens of any size or scale on the square grid. On hex
grids, it handles 1x1 tokens pretty good with only a bit of offset
on the final token placement. Stranger token sizes lead to some
issues with positioning, but I'm not sure how important those are
to fix before the other grid improvements in V12.
arbron added a commit that referenced this issue Mar 13, 2024
Adds three bonuses that add to attack damage, saving throw damage,
and healing. Formula data in these is resolved at summoning time
based on the summoner stats so something like `@item.level` can be
used to add the spell's level of damage to an attack.
arbron added a commit that referenced this issue Mar 13, 2024
The `TokenPlacement` class right now is small and only delegates
to the `TokenPlacementTemplate` which is responsible for rendering
and returning placement information. With the V12 improvements to
placeables hopefully we'll be able to shift more logic out of the
`MeasuredTemplate` subclass and into the `TokenPlacement` class.

The `TokenPlacementConfiguration` data structure currently just
includes the prototype token information, but will eventually have
quantity, origin, and range values to handle multiple summons and
restricting range from the summoner.

Works with tokens of any size or scale on the square grid. On hex
grids, it handles 1x1 tokens pretty good with only a bit of offset
on the final token placement. Stranger token sizes lead to some
issues with positioning, but I'm not sure how important those are
to fix before the other grid improvements in V12.
arbron added a commit that referenced this issue Mar 15, 2024
[#893] Add summoning actor updates & overall workflow
arbron added a commit that referenced this issue Mar 16, 2024
Adds a `SummonsData#canSummon` property that determines whether a
scene is open and whether the user has permissions to summon. If not,
then no summoning control is displayed in the `AbilityUseDialog` and
the chat button is removed.

If user is trying to summon and actor that they do not have ownership
of the will be shown an error.

Also introduces a check for file browser permission when creating
token data if the token is set to use a wildcard image. If the user
lacks permission here, then the token will fall back to using the
portrait image and a warning will be displayed in the console.

Adds a new `SummonsData#fetchActor` data which handles locating the
actor to be summoned. If the actor is in the world, then it just
returns that version. If the associated actor is in a compendium, it
will first search through world actors to find one with a matching
`sourceId` and the `dnd5e.summonedCopy` flag set, summoning from the
pre-imported version if available. Only then will it fall back on
importing the actor from the compendium so long as the user has
permission to do so.
arbron added a commit that referenced this issue Mar 18, 2024
[#893] Add damage & healing bonuses to summoning configuration
arbron added a commit that referenced this issue Mar 18, 2024
[#893] Hide options in ability use dialog when summoning from chat
arbron added a commit that referenced this issue Mar 18, 2024
Adds a `SummonsData#canSummon` property that determines whether a
scene is open and whether the user has permissions to summon. If not,
then no summoning control is displayed in the `AbilityUseDialog` and
the chat button is removed.

If user is trying to summon and actor that they do not have ownership
of the will be shown an error.

Also introduces a check for file browser permission when creating
token data if the token is set to use a wildcard image. If the user
lacks permission here, then the token will fall back to using the
portrait image and a warning will be displayed in the console.

Adds a new `SummonsData#fetchActor` data which handles locating the
actor to be summoned. If the actor is in the world, then it just
returns that version. If the associated actor is in a compendium, it
will first search through world actors to find one with a matching
`sourceId` and the `dnd5e.summonedCopy` flag set, summoning from the
pre-imported version if available. Only then will it fall back on
importing the actor from the compendium so long as the user has
permission to do so.
arbron added a commit that referenced this issue Mar 18, 2024
[#893] Improve permissions checks & allow compendium summoning
arbron added a commit that referenced this issue Mar 20, 2024
The `TokenPlacement` class right now is small and only delegates
to the `TokenPlacementTemplate` which is responsible for rendering
and returning placement information. With the V12 improvements to
placeables hopefully we'll be able to shift more logic out of the
`MeasuredTemplate` subclass and into the `TokenPlacement` class.

The `TokenPlacementConfiguration` data structure currently just
includes the prototype token information, but will eventually have
quantity, origin, and range values to handle multiple summons and
restricting range from the summoner.

Works with tokens of any size or scale on the square grid. On hex
grids, it handles 1x1 tokens pretty good with only a bit of offset
on the final token placement. Stranger token sizes lead to some
issues with positioning, but I'm not sure how important those are
to fix before the other grid improvements in V12.
arbron added a commit that referenced this issue Mar 21, 2024
[#893] Add system for selecting summoning placement
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants