amethyst / amethyst/rustrogueliketutorial

5.24 Damage Over Time Kills Don't Give XP

オープン
#164 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Rust
スター
970
フォーク
166
PR マージ指標
30日以内にマージされた PR はありません

説明

Because damage effects created by a DOT status condition don't include a creator, if the player uses the effect to kill a monster they don't gain any XP from the kill.

I was able to fix it with a little bit of difficulty (all thanks to a bug in specs):

In `components.rs`:
```rust
#[derive(Component, Debug, ConvertSaveload, Clone)]
pub struct DamageOverTime {
pub damage: i32,
pub creator: EntityOption,
}
```

This requires the entity-container workaround at https://github.com/amethyst/specs/issues/681#issuecomment-821274957 to store an optional entity.

In `rawmaster.rs`:

```rust
"damage_over_time" => $eb = $eb.with(DamageOverTime {
damage: effect.1.parse::().unwrap(),
creator: None.into(),
}),
```

Then, in `effects/damage.rs`, pass along the effect creator (converting to an EntityOption):

```rust
.with(DamageOverTime { damage: *damage, creator: effect.creator.into() })
```

And finally, in `ai/initiative_system.rs`, pass the status effect creator back into the effect system:

```rust
add_effect(
dot.creator.into(),
EffectType::Damage { amount: dot.damage },
Targets::Single {
target: status.target,
},
);
```

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。