Implement a proper ability system (#2166)

* Apply fix `21dec2fe`

* Apply fix `89d01d5f`

* Apply fix `d900f154`

this one was already implemented; updated to use call from previous commit

* Ability changing commit

TODO: change info to debug

* Remove use of deprecated methods/fields

* Temp commit v2
(Adding LoseHP and some fixes)

* Oopsie

* Probably fix monster battle

* Fix issue with reflecting into fields

* Fix some things

* Fix ability names for 3.6 resources

* Improve logging

---------

Co-authored-by: StartForKiller <jesussanz2003@gmail.com>
This commit is contained in:
Magix
2023-05-29 23:40:02 -07:00
committed by GitHub
parent 9b58105120
commit f00c54cb95
71 changed files with 2015 additions and 995 deletions

View File

@@ -0,0 +1,68 @@
package emu.grasscutter.game.entity;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.binout.AbilityData;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.EntityIdType;
import emu.grasscutter.game.world.World;
import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo;
import emu.grasscutter.game.world.Position;
import it.unimi.dsi.fastutil.ints.Int2FloatArrayMap;
import it.unimi.dsi.fastutil.ints.Int2FloatMap;
public class EntityTeam extends GameEntity {
private Player player;
public EntityTeam(Player player) {
super(player.getScene());
initAbilities();
this.id = player.getWorld().getNextEntityId(EntityIdType.TEAM);
}
@Override
public void initAbilities() {
//Load abilities from levelElementAbilities
var defaultAbilities = GameData.getConfigGlobalCombat().getDefaultAbilities();
if(defaultAbilities.getDefaultTeamAbilities() != null)
for(var ability : defaultAbilities.getDefaultTeamAbilities()) {
AbilityData data = GameData.getAbilityData(ability);
if(data != null)
player.getWorld().getHost().getAbilityManager().addAbilityToEntity(
this, data);
}
}
@Override
public World getWorld() {
return player.getWorld();
}
@Override
public int getEntityTypeId() {
return EntityIdType.TEAM.getId();
}
@Override
public Int2FloatMap getFightProperties() {
//TODO
return new Int2FloatArrayMap();
}
@Override
public Position getPosition() {
// TODO Auto-generated method stub
return new Position(0, 0, 0);
}
@Override
public Position getRotation() {
return new Position(0, 0, 0);
}
@Override
public SceneEntityInfo toProto() {
return null;
}
}