示例#1
0
 public boolean tick(Tickable ticking, int tickID) {
   if (!super.tick(ticking, tickID)) return false;
   if ((tickID == Tickable.TICKID_MOB) && (affected != null) && (affected instanceof MOB)) {
     MOB mob = (MOB) affected;
     if ((mob.isInCombat())
         && (CMLib.flags().aliveAwakeMobileUnbound(mob, true))
         && (mob.rangeToTarget() == 0)
         && (mob.charStats().getBodyPart(Race.BODY_HAND) > 1)
         && (!anyWeapons(mob))) {
       if (CMLib.dice().rollPercentage() > 95) helpProficiency(mob, 0);
       if ((naturalWeapon == null) || (naturalWeapon.amDestroyed())) {
         naturalWeapon = CMClass.getWeapon("GenWeapon");
         naturalWeapon.setName("a knife hand");
         naturalWeapon.setWeaponType(Weapon.TYPE_PIERCING);
         naturalWeapon.basePhyStats().setDamage(7);
         naturalWeapon.recoverPhyStats();
       }
       CMLib.combat().postAttack(mob, mob.getVictim(), naturalWeapon);
     }
   }
   return true;
 }
示例#2
0
 public boolean execute(MOB mob, Vector commands, int metaFlags) throws java.io.IOException {
   commands.removeElementAt(0);
   MOB leader = CMLib.combat().getFollowedLeader(mob);
   List<MOB>[] done = CMLib.combat().getFormation(mob);
   if (commands.size() == 0) {
     StringBuffer str = new StringBuffer("");
     for (int i = 0; i < done.length; i++)
       if (done[i] != null) {
         if (i == 0) str.append("^xfront  - ^.^?");
         else str.append("^xrow +" + i + " - ^.^?");
         for (int i2 = 0; i2 < done[i].size(); i2++)
           str.append(((i2 > 0) ? ", " : "") + ((MOB) done[i].get(i2)).name());
         str.append("\n\r");
       }
     mob.session().colorOnlyPrintln(str.toString());
   } else if (commands.size() == 1) mob.tell("Put whom in what row?");
   else if (mob.numFollowers() == 0) mob.tell("Noone is following you!");
   else {
     String row = (String) commands.lastElement();
     if ("FRONT".startsWith(row.toUpperCase())) row = "0";
     commands.removeElementAt(commands.size() - 1);
     String name = CMParms.combine(commands, 0);
     MOB who = null;
     if (CMLib.english().containsString(mob.name(), name)
         || CMLib.english().containsString(mob.Name(), name)) {
       mob.tell("You can not move your own position.  You are always the leader of your party.");
       return false;
     }
     for (int f = 0; f < mob.numFollowers(); f++) {
       MOB M = mob.fetchFollower(f);
       if (M == null) continue;
       if (CMLib.english().containsString(M.name(), name)
           || CMLib.english().containsString(M.Name(), name)) {
         who = M;
         break;
       }
     }
     if (who == null) {
       mob.tell("There is noone following you called " + name + ".");
       return false;
     }
     if ((!CMath.isNumber(row)) || (CMath.s_int(row) < 0))
       mob.tell(
           "'"
               + row
               + "' is not a valid row in which to put "
               + who.name()
               + ".  Try number greater than 0.");
     else {
       int leaderRow = -1;
       for (int f = 0; f < done.length; f++)
         if ((done[f] != null) && (done[f].contains(leader))) {
           leaderRow = f;
           break;
         }
       if (leaderRow < 0) mob.tell("You do not exist.");
       else if (CMath.s_int(row) < leaderRow)
         mob.tell(
             "You can not place "
                 + who.name()
                 + " behind your own position, which is "
                 + leaderRow
                 + ".");
       else {
         mob.addFollower(who, CMath.s_int(row) - leaderRow);
         mob.tell("You have positioned " + who.name() + " to row " + CMath.s_int(row));
       }
     }
   }
   return false;
 }