⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clubattackaction.java

📁 MegaMek is a networked Java clone of BattleTech, a turn-based sci-fi boardgame for 2+ players. Fight
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            if (ae.weaponFiredFrom(Mech.LOC_RARM)                    || ae.weaponFiredFrom(Mech.LOC_LARM)) {                return new ToHitData(ToHitData.IMPOSSIBLE, "Weapons fired from arm this turn");            }            // need shoulder and hand actuators            if (!ae.hasWorkingSystem(Mech.ACTUATOR_SHOULDER, Mech.LOC_RARM)                    || !ae.hasWorkingSystem(Mech.ACTUATOR_SHOULDER, Mech.LOC_LARM)) {                return new ToHitData(ToHitData.IMPOSSIBLE, "Shoulder actuator destroyed");            }            if ( (!ae.hasWorkingSystem(Mech.ACTUATOR_HAND, Mech.LOC_RARM)                    || !ae.hasWorkingSystem(Mech.ACTUATOR_HAND, Mech.LOC_LARM))  && needsHand) {                return new ToHitData(ToHitData.IMPOSSIBLE, "Hand actuator destroyed");            }        } else if (shield) {            if (!ae.hasPassiveShield(club.getLocation())) {                return new ToHitData(ToHitData.IMPOSSIBLE, "Shield not in passive mode");            }        } else if (((MiscType)club.getType()).hasSubType(MiscType.S_FLAIL)){            if (!ae.hasWorkingSystem(Mech.ACTUATOR_UPPER_ARM, club.getLocation())) {                return new ToHitData(ToHitData.IMPOSSIBLE, "Upper actuator destroyed");            }            if (!ae.hasWorkingSystem(Mech.ACTUATOR_LOWER_ARM, club.getLocation())) {                return new ToHitData(ToHitData.IMPOSSIBLE, "Lower actuator destroyed");            }        } else {            // check if arm is present            if (ae.isLocationBad(club.getLocation())) {                return new ToHitData(ToHitData.IMPOSSIBLE, "Arm missing");            }            // check if attacker has fired arm-mounted weapons            if (ae.weaponFiredFrom(club.getLocation())) {                return new ToHitData(ToHitData.IMPOSSIBLE, "Weapons fired from arm this turn");            }            // need shoulder and hand actuators            if (!ae.hasWorkingSystem(Mech.ACTUATOR_SHOULDER, club.getLocation())) {                return new ToHitData(ToHitData.IMPOSSIBLE, "Shoulder actuator destroyed");            }            if (!ae.hasWorkingSystem(Mech.ACTUATOR_HAND, club.getLocation()) && needsHand) {                return new ToHitData(ToHitData.IMPOSSIBLE, "Hand actuator destroyed");            }        }        // club must not be damaged        if (!shield && ae.getBadCriticals(CriticalSlot.TYPE_EQUIPMENT,                ae.getEquipmentNum(club), club.getLocation()) > 0) {            return new ToHitData(ToHitData.IMPOSSIBLE, "Club is damaged");        }        // check elevation (target must be within one level, except for VTOL)        int targetMaxElevation = attackerHeight;        if(target instanceof VTOL) {            targetMaxElevation ++;        }        if (targetHeight < attackerElevation || targetElevation > targetMaxElevation) {            return new ToHitData(ToHitData.IMPOSSIBLE, "Target elevation not in range");        }        // check facing        int clubArc = bothArms ? Compute.ARC_FORWARD : (club.getLocation() == Mech.LOC_LARM ? Compute.ARC_LEFTARM : Compute.ARC_RIGHTARM);        if ( !Compute.isInArc( ae.getPosition(), ae.getSecondaryFacing(),                       target.getPosition(), clubArc ) ) {            return new ToHitData(ToHitData.IMPOSSIBLE, "Target not in arc");        }        // can't club while prone        if (ae.isProne()) {            return new ToHitData(ToHitData.IMPOSSIBLE, "Attacker is prone");        }        // Attacks against adjacent buildings automatically hit.        if (target.getTargetType() == Targetable.TYPE_BUILDING                || target.getTargetType() == Targetable.TYPE_FUEL_TANK                || target instanceof GunEmplacement) {            return new ToHitData( ToHitData.AUTOMATIC_SUCCESS,                                  "Targeting adjacent building." );        }        //Set the base BTH        int base = 4;        if ( game.getOptions().booleanOption("maxtech_physical_BTH") ) {            base = ae.getCrew().getPiloting() - 1;        }        // Various versions of physical weapons have different base bonuses and penalties.        if (((MiscType)club.getType()).hasSubType(MiscType.S_SWORD)                || ((MiscType)club.getType()).isVibroblade()) {            base -= 1;        } else if ((((MiscType)club.getType()).hasSubType(MiscType.S_DUAL_SAW))                || (((MiscType)club.getType()).hasSubType(MiscType.S_CHAINSAW))                || (((MiscType)club.getType()).hasSubType(MiscType.S_FLAIL))) {            base += 1;        } else if ((((MiscType)club.getType()).hasSubType(MiscType.S_MACE_THB))                 || (((MiscType)club.getType()).hasSubType(MiscType.S_MACE))                || (((MiscType)club.getType()).hasSubType(MiscType.S_BACKHOE))                || (((MiscType)club.getType()).hasSubType(MiscType.S_LANCE))                || (((MiscType)club.getType()).hasSubType(MiscType.S_BACKHOE))                || (((MiscType)club.getType()).hasSubType(MiscType.S_WRECKING_BALL))) {            base += 2;        } else if (((MiscType)club.getType()).hasSubType(MiscType.S_PILE_DRIVER)) {            base += 3;        } else if (((MiscType)club.getType()).hasSubType(MiscType.S_SHIELD_LARGE)) {            base -= 3;        } else if (((MiscType)club.getType()).hasSubType(MiscType.S_SHIELD_MEDIUM)) {            base -= 2;        } else if (((MiscType)club.getType()).hasSubType(MiscType.S_SHIELD_SMALL)) {            base -= 1;        }        toHit = new ToHitData(base, "base");        setCommonModifiers(toHit, game, ae, target);        // damaged or missing actuators        if (bothArms) {            if (!ae.hasWorkingSystem(Mech.ACTUATOR_UPPER_ARM, Mech.LOC_RARM)) {                toHit.addModifier(2, "Upper arm actuator destroyed");            }            if (!ae.hasWorkingSystem(Mech.ACTUATOR_UPPER_ARM, Mech.LOC_LARM)) {                toHit.addModifier(2, "Upper arm actuator destroyed");            }            if (!ae.hasWorkingSystem(Mech.ACTUATOR_LOWER_ARM, Mech.LOC_RARM)) {                toHit.addModifier(2, "Lower arm actuator missing or destroyed");            }            if (!ae.hasWorkingSystem(Mech.ACTUATOR_LOWER_ARM, Mech.LOC_LARM)) {                toHit.addModifier(2, "Lower arm actuator missing or destroyed");            }            if (hasClaws) {                toHit.addModifier(2, "Mek has claws");            }        } else {            if (!ae.hasWorkingSystem(Mech.ACTUATOR_UPPER_ARM, club.getLocation())) {                toHit.addModifier(2, "Upper arm actuator destroyed");                if ( (((MiscType)club.getType()).hasSubType(MiscType.S_LANCE)) )                    return new ToHitData(ToHitData.IMPOSSIBLE, "Unable to use lance with upper arm actuator missing or destroyed");            }            if (!ae.hasWorkingSystem(Mech.ACTUATOR_LOWER_ARM, club.getLocation())) {                toHit.addModifier(2, "Lower arm actuator missing or destroyed");                if ( (((MiscType)club.getType()).hasSubType(MiscType.S_LANCE)) )                    return new ToHitData(ToHitData.IMPOSSIBLE, "Unable to use lance with lower arm actuator missing or destroyed");            }            //Rules state +2 bth if your using a club with claws.            if (hasClaws) {                toHit.addModifier(2, "Mek has claws");            }            if ( (((MiscType)club.getType()).hasSubType(MiscType.S_LANCE))                    && (!ae.hasWorkingSystem(Mech.ACTUATOR_LOWER_ARM, club.getLocation())                             || !ae.hasWorkingSystem(Mech.ACTUATOR_UPPER_ARM, club.getLocation()))){            }        }        // elevation        if (attackerElevation == targetElevation) {            if (shield)                toHit.setHitTable(ToHitData.HIT_PUNCH);            else                toHit.setHitTable(ToHitData.HIT_NORMAL);        } else if (attackerElevation < targetElevation) {            if (target.getHeight() == 0) {                if (shield )                    toHit.setHitTable(ToHitData.HIT_PUNCH);                else                    toHit.setHitTable(ToHitData.HIT_NORMAL);            } else {                toHit.setHitTable(ToHitData.HIT_KICK);            }        } else {            toHit.setHitTable(ToHitData.HIT_PUNCH);        }        // factor in target side        toHit.setSideTable(Compute.targetSideTable(ae,target));        // done!        return toHit;    }    public Mounted getClub() {        return club;    }        public void setClub(Mounted club) {        this.club = club;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -