public ClanPosition addPosition() { Authority[] pows = new Authority[Function.values().length]; for (int i = 0; i < pows.length; i++) pows[i] = Authority.CAN_NOT_DO; Set<Integer> roles = new HashSet<Integer>(); int highestRank = 0; for (ClanPosition pos : positions) { roles.add(Integer.valueOf(pos.getRoleID())); if (highestRank < pos.getRank()) highestRank = pos.getRank(); } if (positions.length > 0) for (int i = 0; i < pows.length; i++) pows[i] = positions[0].getFunctionChart()[i]; positions = Arrays.copyOf(positions, positions.length + 1); ClanPosition P = (ClanPosition) CMClass.getCommon("DefaultClanPosition"); P.setID(positions.length + "" + Math.random()); P.setRoleID(0); P.setRank(highestRank); P.setName("Unnamed"); P.setPluralName("Unnameds"); P.setMax(Integer.MAX_VALUE); P.setInnerMaskStr(""); P.setFunctionChart(pows); P.setPublic(true); positions[positions.length - 1] = P; for (int i = 0; i < positions.length; i++) if (!roles.contains(Integer.valueOf(i))) { P.setRoleID(i); break; } return P; }
public boolean invoke(MOB mob, Vector commands, Physical givenTarget, boolean auto, int asLevel) { if (mob.fetchEffect("Thief_Hide") != null) { mob.tell("You are already hiding."); return false; } if (mob.isInCombat()) { mob.tell("Not while in combat!"); return false; } if (!super.invoke(mob, commands, givenTarget, auto, asLevel)) return false; Set<MOB> H = mob.getGroupMembers(new HashSet<MOB>()); if (!H.contains(mob)) H.add(mob); int numBesidesMe = 0; for (Iterator e = H.iterator(); e.hasNext(); ) { MOB M = (MOB) e.next(); if ((M != mob) && (mob.location().isInhabitant(M))) numBesidesMe++; } if (numBesidesMe == 0) { mob.tell("You need a group to set up an ambush!"); return false; } for (int i = 0; i < mob.location().numInhabitants(); i++) { MOB M = mob.location().fetchInhabitant(i); if ((M != null) && (M != mob) && (!H.contains(M)) && (CMLib.flags().canSee(M))) { mob.tell(M, null, null, "<S-NAME> is watching you too closely."); return false; } } boolean success = proficiencyCheck(mob, 0, auto); if (!success) beneficialVisualFizzle(mob, null, "<S-NAME> attempt(s) to set up an ambush, but fail(s)."); else { CMMsg msg = CMClass.getMsg( mob, null, this, auto ? CMMsg.MSG_OK_ACTION : (CMMsg.MSG_DELICATE_HANDS_ACT | CMMsg.MASK_MOVE), "<S-NAME> set(s) up an ambush, directing everyone to hiding places."); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); invoker = mob; Ability hide = CMClass.getAbility("Thief_Hide"); for (Iterator e = H.iterator(); e.hasNext(); ) { MOB M = (MOB) e.next(); hide.invoke(M, M, true, adjustedLevel(mob, asLevel)); } } else success = false; } return success; }