I rewrite code, now this is:
Code: Select all
double damage=0.0, range=0.0;
for (WeaponMount weaponMount:unit.getWeaponMounts()) {
WeaponDef weapon=weaponMount.getWeaponDef();
if (!weapon.isParalyzer()
&& weapon.isAbleToAttackGround() && !weapon.isShield()) {
range = Math.max(range, weapon.getRange());
//weapon.getDamage().getTypes() // test!!!
owner.sendTextMsg(" Weapon types: "+weapon.getDamage().getTypes().toString(), FieldBOT.MSG_DBG_ALL);
float dMultipler=weapon.getSalvoSize()*weapon.getProjectilesPerShot();
float dmg= weapon.getAreaOfEffect();// ?! //weapon.getDamage().getTypes().get(0);
//weapon.getDamage().getImpulseBoost(); //last test failed
owner.sendTextMsg(" Weapon "+weapon.getName()+" damage="+dmg+" x multipler="+dMultipler+" (isSelfExplode="+weapon.isSelfExplode()+" isNoSelfDamage="+weapon.isNoSelfDamage()+" isParalyzer="+weapon.isParalyzer()+" isShield="+weapon.isShield()+" isAbleToAttackGround="+weapon.isAbleToAttackGround()+");" ,FieldBOT.MSG_DBG_ALL);
damage += dmg*dMultipler;
} else owner.sendTextMsg(" Weapon "+weapon.getName()+" isSelfExplode="+weapon.isSelfExplode()+", isNoSelfDamage="+weapon.isNoSelfDamage()+" isParalyzer="+weapon.isParalyzer()+" isShield="+weapon.isShield()+" isAbleToAttackGround="+weapon.isAbleToAttackGround()+";" ,FieldBOT.MSG_DBG_ALL);
}
Output debug text:
Code: Select all
Weapon types: [24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 12.0, 24.0, 24.0, 5.0, 24.0]
Weapon armflea_flea_laser damage=4.0 x multipler=1.0 (isSelfExplode=false isNoSelfDamage=true isParalyzer=false isShield=false isAbleToAttackGround=true);
Weapon armjeth_bogus_missile isSelfExplode=false, isNoSelfDamage=false isParalyzer=false isShield=false isAbleToAttackGround=false;
Weapon types: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
Weapon noweapon damage=4.0 x multipler=1.0 (isSelfExplode=false isNoSelfDamage=false isParalyzer=false isShield=false isAbleToAttackGround=true);
Whay that many weapon types?
Ok, I agree about weapon.getDamage().getTypes().get(0) is the near for real damage count.
Now I found new problem: How check weapon environment (fround, air, underwather)? I found that my bot choose best weapon for big range is anti-air, but I want choose best weapon range for ground atack.
How check that weapon is not self-destruction (no mine)?