Handle SetRandomOverrideMapValue

This commit is contained in:
StartForKiller
2023-06-04 19:55:36 +02:00
committed by KingRainbow44
parent b5595c3fab
commit f389d2fb28
3 changed files with 579 additions and 0 deletions

View File

@@ -333,6 +333,10 @@ public class AbilityModifier implements Serializable {
public DynamicFloat ratio = DynamicFloat.ONE;
public int configID;
public DynamicFloat valueRangeMin;
public DynamicFloat valueRangeMax;
public String overrideMapKey;
public int param1;
public int param2;
public int param3;

View File

@@ -0,0 +1,36 @@
package emu.grasscutter.game.ability.actions;
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.binout.AbilityModifier.AbilityModifierAction;
import emu.grasscutter.game.ability.Ability;
import emu.grasscutter.game.entity.GameEntity;
import emu.grasscutter.net.proto.AbilityActionSetRandomOverrideMapValueOuterClass.AbilityActionSetRandomOverrideMapValue;
@AbilityAction(AbilityModifierAction.Type.SetRandomOverrideMapValue)
public class ActionSetRandomOverrideMapValue extends AbilityActionHandler {
@Override
public boolean execute(Ability ability, AbilityModifierAction action, ByteString abilityData, GameEntity target) {
AbilityActionSetRandomOverrideMapValue valueProto;
try {
valueProto = AbilityActionSetRandomOverrideMapValue.parseFrom(abilityData);
} catch (InvalidProtocolBufferException e) {
return false;
}
float value = valueProto.getRandomValue();
float valueRangeMin = action.valueRangeMin.get(ability);
float valueRangeMax = action.valueRangeMax.get(ability);
if(value < valueRangeMin || value > valueRangeMax) {
Grasscutter.getLogger().warn("Tried setting value out of range: {} inside [{}, {}]", value, valueRangeMin, valueRangeMax);
return true;
}
ability.getAbilitySpecials().put(action.overrideMapKey, value);
return true;
}
}