Update jass2 with UnitAddAbility native

This commit is contained in:
Retera 2022-01-23 17:04:18 -05:00
parent 9c9f1633fd
commit 35a489b1f8
2 changed files with 32 additions and 2 deletions

View File

@ -82,9 +82,11 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CUnitType;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CWidget; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.CWidget;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.CAbility;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.GetAbilityByRawcodeVisitor; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.GetAbilityByRawcodeVisitor;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.generic.CLevelingAbility;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.inventory.CAbilityInventory; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.inventory.CAbilityInventory;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.mine.CAbilityBlightedGoldMine; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.mine.CAbilityBlightedGoldMine;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityPointTarget; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.targeting.AbilityPointTarget;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.abilities.types.CAbilityType;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.ai.AIDifficulty; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.ai.AIDifficulty;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.config.CPlayerAPI; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.config.CPlayerAPI;
import com.etheller.warsmash.viewer5.handlers.w3x.simulation.config.War3MapConfig; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.config.War3MapConfig;
@ -3205,6 +3207,34 @@ public class Jass2 {
return null; return null;
} }
}); });
jassProgramVisitor.getJassNativeManager().createNative("UnitAddAbility", new JassFunction() {
@Override
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,
final TriggerExecutionScope triggerScope) {
final CUnit whichUnit = arguments.get(0).visit(ObjectJassValueVisitor.getInstance());
final int abilityId = arguments.get(1).visit(IntegerJassValueVisitor.getInstance());
final War3ID rawcode = new War3ID(abilityId);
final CAbilityType<?> abilityType = CommonEnvironment.this.simulation.getAbilityData()
.getAbilityType(rawcode);
if (abilityType == null) {
System.err.println(
"UnitAddAbility: The requested ability has not been programmed yet: " + rawcode);
return BooleanJassValue.FALSE;
}
final CLevelingAbility existingAbility = whichUnit
.getAbility(GetAbilityByRawcodeVisitor.getInstance().reset(rawcode));
if (existingAbility != null) {
return BooleanJassValue.FALSE;
}
final CAbility ability = abilityType
.createAbility(CommonEnvironment.this.simulation.getHandleIdAllocator().createId());
whichUnit.add(CommonEnvironment.this.simulation, ability);
return BooleanJassValue.TRUE;
}
});
jassProgramVisitor.getJassNativeManager().createNative("UnitItemInSlot", new JassFunction() { jassProgramVisitor.getJassNativeManager().createNative("UnitItemInSlot", new JassFunction() {
@Override @Override
public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope, public JassValue call(final List<JassValue> arguments, final GlobalScope globalScope,

View File

@ -25,7 +25,7 @@ public class WarsmashConstants {
// find it yet so I used this // find it yet so I used this
public static final String DEFAULT_STRING = "Default string"; public static final String DEFAULT_STRING = "Default string";
public static final boolean CATCH_CURSOR = true; public static final boolean CATCH_CURSOR = false;
public static final boolean VERBOSE_LOGGING = false; public static final boolean VERBOSE_LOGGING = false;
public static final boolean ENABLE_DEBUG = false; public static final boolean ENABLE_DEBUG = false;
public static final char SPECIAL_ESCAPE_KEYCODE = 0x7E; public static final char SPECIAL_ESCAPE_KEYCODE = 0x7E;
@ -36,7 +36,7 @@ public class WarsmashConstants {
// workaround to fix it if you need the local files // workaround to fix it if you need the local files
// to take priority over built-ins for tilesets. // to take priority over built-ins for tilesets.
public static final boolean FIX_FLAT_FILES_TILESET_LOADING = false; public static final boolean FIX_FLAT_FILES_TILESET_LOADING = false;
public static final boolean ENABLE_MUSIC = false; public static final boolean ENABLE_MUSIC = true;
public static final boolean LOAD_UNITS_FROM_WORLDEDIT_DATA = false; public static final boolean LOAD_UNITS_FROM_WORLDEDIT_DATA = false;
public static final boolean CRASH_ON_INCOMPATIBLE_132_FEATURES = false; public static final boolean CRASH_ON_INCOMPATIBLE_132_FEATURES = false;
public static final boolean FIRE_DEATH_EVENTS_ON_REMOVEUNIT = false; public static final boolean FIRE_DEATH_EVENTS_ON_REMOVEUNIT = false;