amethyst / amethyst/rustrogueliketutorial

5.24 Damage Over Time Kills Don't Give XP

Abierto
#164 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Rust
Estrellas
970
Forks
166
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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,
},
);
```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.