public void recursiveDropMOB(MOB mob, Room room, Item thisContainer, boolean bodyFlag) { // caller is responsible for recovering any env // stat changes! if (CMLib.flags().isHidden(thisContainer)) thisContainer .baseEnvStats() .setDisposition( thisContainer.baseEnvStats().disposition() & ((int) EnvStats.ALLMASK - EnvStats.IS_HIDDEN)); mob.delInventory(thisContainer); thisContainer.unWear(); if (!bodyFlag) bodyFlag = (thisContainer instanceof DeadBody); if (bodyFlag) { room.addItem(thisContainer); thisContainer.setExpirationDate(0); } else room.addItemRefuse(thisContainer, CMProps.getIntVar(CMProps.SYSTEMI_EXPIRE_PLAYER_DROP)); thisContainer.recoverEnvStats(); boolean nothingDone = true; do { nothingDone = true; for (int i = 0; i < mob.inventorySize(); i++) { Item thisItem = mob.fetchInventory(i); if ((thisItem != null) && (thisItem.container() == thisContainer)) { recursiveDropMOB(mob, room, thisItem, bodyFlag); nothingDone = false; break; } } } while (!nothingDone); }
public boolean armorCheck(MOB mob, int allowedArmorLevel) { if (allowedArmorLevel == CharClass.ARMOR_ANY) return true; for (int i = 0; i < mob.inventorySize(); i++) { Item I = mob.fetchInventory(i); if ((I != null) && (!I.amWearingAt(Wearable.IN_INVENTORY))) { boolean ok = armorCheck(mob, I, allowedArmorLevel); if ((!ok) && ((I.rawWornCode() & CharClass.ARMOR_WEARMASK) > 0)) return false; } } return true; }
public void outfit(MOB mob, Vector items) { if ((mob == null) || (items == null) || (items.size() == 0)) return; for (int i = 0; i < items.size(); i++) { Item I = (Item) items.elementAt(i); if (mob.fetchInventory("$" + I.name() + "$") == null) { I = (Item) I.copyOf(); I.text(); I.recoverEnvStats(); mob.addInventory(I); if (I.whereCantWear(mob) <= 0) I.wearIfPossible(mob); if (((I instanceof Armor) || (I instanceof Weapon)) && (I.amWearingAt(Wearable.IN_INVENTORY))) I.destroy(); } } }
public void confirmWearability(MOB mob) { if (mob == null) return; Race R = mob.charStats().getMyRace(); DVector reWearSet = new DVector(2); Item item = null; for (int i = 0; i < mob.inventorySize(); i++) { item = mob.fetchInventory(i); if ((item != null) && (!item.amWearingAt(Wearable.IN_INVENTORY))) { Long oldCode = Long.valueOf(item.rawWornCode()); item.unWear(); if (reWearSet.size() == 0) reWearSet.addElement(item, oldCode); else { short layer = (item instanceof Armor) ? ((Armor) item).getClothingLayer() : 0; int d = 0; for (; d < reWearSet.size(); d++) if (reWearSet.elementAt(d, 1) instanceof Armor) { if (((Armor) reWearSet.elementAt(d, 1)).getClothingLayer() > layer) break; } else if (0 > layer) break; if (d >= reWearSet.size()) reWearSet.addElement(item, oldCode); else reWearSet.insertElementAt(d, item, oldCode); } } } for (int r = 0; r < reWearSet.size(); r++) { item = (Item) reWearSet.elementAt(r, 1); long oldCode = ((Long) reWearSet.elementAt(r, 2)).longValue(); int msgCode = CMMsg.MSG_WEAR; if ((oldCode & Wearable.WORN_WIELD) > 0) msgCode = CMMsg.MSG_WIELD; else if ((oldCode & Wearable.WORN_HELD) > 0) msgCode = CMMsg.MSG_HOLD; CMMsg msg = CMClass.getMsg( mob, item, null, CMMsg.NO_EFFECT, null, msgCode, null, CMMsg.NO_EFFECT, null); if ((R.okMessage(mob, msg)) && (item.okMessage(item, msg)) && ((mob.charStats().getWearableRestrictionsBitmap() & oldCode) == 0) && (item.canWear(mob, oldCode))) item.wearAt(oldCode); } // why wasn't that here before? mob.recoverEnvStats(); mob.recoverCharStats(); mob.recoverMaxState(); }
public void extinguish(MOB source, Environmental target, boolean mundane) { if (target instanceof Room) { Room R = (Room) target; for (int m = 0; m < R.numInhabitants(); m++) { MOB M = R.fetchInhabitant(m); if (M != null) extinguish(source, M, mundane); } for (int i = 0; i < R.numItems(); i++) { Item I = R.fetchItem(i); if (I != null) extinguish(source, I, mundane); } return; } for (int a = target.numEffects() - 1; a >= 0; a--) { Ability A = target.fetchEffect(a); if ((A != null) && ((!mundane) || ((A.classificationCode() & Ability.ALL_ACODES) == Ability.ACODE_PROPERTY))) { if ((CMath.bset(A.flags(), Ability.FLAG_HEATING) && (!mundane)) || (CMath.bset(A.flags(), Ability.FLAG_FIREBASED)) || ((A.ID().equalsIgnoreCase("Spell_SummonElemental") && A.text().toUpperCase().indexOf("FIRE") >= 0))) A.unInvoke(); } } if ((target instanceof MOB) && (!mundane)) { MOB tmob = (MOB) target; if (tmob.charStats().getMyRace().ID().equals("FireElemental")) CMLib.combat().postDeath(source, (MOB) target, null); for (int i = 0; i < tmob.inventorySize(); i++) { Item I = tmob.fetchInventory(i); if (I != null) extinguish(tmob, I, mundane); } } if ((target instanceof Light) && (((Light) target).isLit())) { ((Light) target).tick(target, Tickable.TICKID_LIGHT_FLICKERS); ((Light) target).light(false); } }
public int processVariableEquipment(MOB mob) { int newLastTickedDateTime = 0; if (mob != null) { Room R = mob.location(); if (R != null) { for (int i = 0; i < R.numInhabitants(); i++) { MOB M = R.fetchInhabitant(i); if ((M != null) && (!M.isMonster()) && (CMSecurity.isAllowed(M, R, "CMDMOBS"))) { newLastTickedDateTime = -1; break; } } if (newLastTickedDateTime == 0) { Vector rivals = new Vector(); for (int i = 0; i < mob.inventorySize(); i++) { Item I = mob.fetchInventory(i); if ((I != null) && (I.baseEnvStats().rejuv() > 0) && (I.baseEnvStats().rejuv() < Integer.MAX_VALUE)) { Vector V = null; for (int r = 0; r < rivals.size(); r++) { Vector V2 = (Vector) rivals.elementAt(r); Item I2 = (Item) V2.firstElement(); if (I2.rawWornCode() == I.rawWornCode()) { V = V2; break; } } if (V == null) { V = new Vector(); rivals.addElement(V); } V.addElement(I); } } for (int i = 0; i < rivals.size(); i++) { Vector V = (Vector) rivals.elementAt(i); if ((V.size() == 1) || (((Item) V.firstElement()).rawWornCode() == 0)) { for (int r = 0; r < V.size(); r++) { Item I = (Item) V.elementAt(r); if (CMLib.dice().rollPercentage() < I.baseEnvStats().rejuv()) mob.delInventory(I); else { I.baseEnvStats().setRejuv(0); I.envStats().setRejuv(0); } } } else { int totalChance = 0; for (int r = 0; r < V.size(); r++) { Item I = (Item) V.elementAt(r); totalChance += I.baseEnvStats().rejuv(); } int chosenChance = CMLib.dice().roll(1, totalChance, 0); totalChance = 0; Item chosenI = null; for (int r = 0; r < V.size(); r++) { Item I = (Item) V.elementAt(r); if (chosenChance <= (totalChance + I.baseEnvStats().rejuv())) { chosenI = I; break; } totalChance += I.baseEnvStats().rejuv(); } for (int r = 0; r < V.size(); r++) { Item I = (Item) V.elementAt(r); if (chosenI != I) mob.delInventory(I); else { I.baseEnvStats().setRejuv(0); I.envStats().setRejuv(0); } } } } if (mob instanceof ShopKeeper) { rivals = new Vector(); CoffeeShop shop = ((ShopKeeper) mob).getShop(); for (int v = 0; v < shop.getBaseInventory().size(); v++) { Environmental E = (Environmental) shop.getBaseInventory().elementAt(v); if ((E.baseEnvStats().rejuv() > 0) && (E.baseEnvStats().rejuv() < Integer.MAX_VALUE)) rivals.addElement(E); } for (int r = 0; r < rivals.size(); r++) { Environmental E = (Environmental) rivals.elementAt(r); if (CMLib.dice().rollPercentage() > E.baseEnvStats().rejuv()) shop.delAllStoreInventory(E); else { E.baseEnvStats().setRejuv(0); E.envStats().setRejuv(0); } } } mob.recoverEnvStats(); mob.recoverCharStats(); mob.recoverMaxState(); } } } return newLastTickedDateTime; }