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;
 }
Example #2
0
  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;
  }