package com.planet_ink.coffee_mud.Commands; import com.planet_ink.coffee_mud.core.interfaces.*; import com.planet_ink.coffee_mud.core.*; import com.planet_ink.coffee_mud.Abilities.interfaces.*; import com.planet_ink.coffee_mud.Areas.interfaces.*; import com.planet_ink.coffee_mud.Behaviors.interfaces.*; import com.planet_ink.coffee_mud.CharClasses.interfaces.*; import com.planet_ink.coffee_mud.Commands.interfaces.*; import com.planet_ink.coffee_mud.Common.interfaces.*; import com.planet_ink.coffee_mud.Exits.interfaces.*; import com.planet_ink.coffee_mud.Items.interfaces.*; import com.planet_ink.coffee_mud.Locales.interfaces.*; import com.planet_ink.coffee_mud.MOBS.interfaces.*; import com.planet_ink.coffee_mud.Races.interfaces.*; import java.util.*; /* Copyright 2000-2006 Bo Zimmerman Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ public class Reset extends StdCommand { public Reset(){} private String[] access={"RESET"}; public boolean canBeOrdered(){return true;} public String[] getAccessWords(){return access;} public boolean securityCheck(MOB mob){return CMSecurity.isAllowed(mob,mob.location(),"RESET");} public int resetAreaOramaManaI(MOB mob, Item I, Hashtable rememberI, String lead) throws java.io.IOException { int nochange=0; if(I instanceof Weapon) { Weapon W=(Weapon)I; if((W.requiresAmmunition())&&(W.ammunitionCapacity()>0)) { String str=mob.session().prompt(lead+I.Name()+" requires ("+W.ammunitionType()+"): "); if(str.length()>0) { if((str.trim().length()==0)||(str.equalsIgnoreCase("no"))) { W.setAmmunitionType(""); W.setAmmoCapacity(0); W.setUsesRemaining(100); str=mob.session().prompt(lead+I.Name()+" new weapon type: "); W.setWeaponType(CMath.s_int(str)); } else W.setAmmunitionType(str.trim()); nochange=1; } } } Integer IT=(Integer)rememberI.get(I.Name()); if(IT!=null) { if(IT.intValue()==I.material()) { mob.tell(lead+I.Name()+" still "+RawMaterial.RESOURCE_DESCS[I.material()&RawMaterial.RESOURCE_MASK]); return nochange; } I.setMaterial(IT.intValue()); mob.tell(lead+I.Name()+" Changed to "+RawMaterial.RESOURCE_DESCS[I.material()&RawMaterial.RESOURCE_MASK]); return 1; } while(true) { String str=mob.session().prompt(lead+I.Name()+"/"+RawMaterial.RESOURCE_DESCS[I.material()&RawMaterial.RESOURCE_MASK],""); if(str.equalsIgnoreCase("delete")) return -1; else if(str.length()==0) { rememberI.put(I.Name(),new Integer(I.material())); return nochange; } if(str.equals("?")) mob.tell(I.Name()+"/"+I.displayText()+"/"+I.description()); else { String poss=""; for(int ii=0;ii<RawMaterial.RESOURCE_DESCS.length;ii++) { if(RawMaterial.RESOURCE_DESCS[ii].startsWith(str.toUpperCase())) poss=RawMaterial.RESOURCE_DESCS[ii]; if(str.equalsIgnoreCase(RawMaterial.RESOURCE_DESCS[ii])) { I.setMaterial(RawMaterial.RESOURCE_DATA[ii][0]); mob.tell(lead+"Changed to "+RawMaterial.RESOURCE_DESCS[I.material()&RawMaterial.RESOURCE_MASK]); rememberI.put(I.Name(),new Integer(I.material())); return 1; } } if(poss.length()==0) { for(int ii=0;ii<RawMaterial.RESOURCE_DESCS.length;ii++) { if(RawMaterial.RESOURCE_DESCS[ii].indexOf(str.toUpperCase())>=0) poss=RawMaterial.RESOURCE_DESCS[ii]; } } mob.tell(lead+"'"+str+"' does not exist. Try '"+poss+"'."); } } } protected int rightImportMat(MOB mob, Item I, boolean openOnly) throws java.io.IOException { if((I!=null)&&(I.description().trim().length()>0)) { int x=I.description().trim().indexOf(" "); int y=I.description().trim().lastIndexOf(" "); if((x<0)||((x>0)&&(y==x))) { String s=I.description().trim().toLowerCase(); if((mob!=null)&&(mob.session()!=null)&&(openOnly)) { if(mob.session().confirm("Clear "+I.name()+"/"+I.displayText()+"/"+I.description()+" (Y/n)?","Y")) { I.setDescription(""); return I.material(); } return -1; } int rightMat=-1; for(int i=0;i<Import.objDescs.length;i++) { if(Import.objDescs[i][0].equals(s)) { rightMat=CMath.s_int(Import.objDescs[i][1]); break; } } s=I.description().trim().toUpperCase(); if(rightMat<0) { Log.sysOut("Reset","Unconventional material: "+I.description()); for(int i=0;i<RawMaterial.RESOURCE_DESCS.length;i++) { if(RawMaterial.RESOURCE_DESCS[i].equals(s)) { rightMat=RawMaterial.RESOURCE_DATA[i][0]; break; } } } if(rightMat<0) Log.sysOut("Reset","Unknown material: "+I.description()); else if(I.material()!=rightMat) { if(mob!=null) { if(mob.session().confirm("Change "+I.name()+"/"+I.displayText()+" material to "+RawMaterial.RESOURCE_DESCS[rightMat&RawMaterial.RESOURCE_MASK]+" (y/N)?","N")) { I.setMaterial(rightMat); I.setDescription(""); return rightMat; } } else { Log.sysOut("Reset","Changed "+I.name()+"/"+I.displayText()+" material to "+RawMaterial.RESOURCE_DESCS[rightMat&RawMaterial.RESOURCE_MASK]+"!"); I.setMaterial(rightMat); I.setDescription(""); return rightMat; } } else { I.setDescription(""); return rightMat; } } } return -1; } public boolean execute(MOB mob, Vector commands) throws java.io.IOException { commands.removeElementAt(0); if(commands.size()<1) { mob.tell("Reset this Room, or the whole Area?"); return false; } String s=(String)commands.elementAt(0); if(s.equalsIgnoreCase("room")) { mob.location().show(mob,null,CMMsg.MSG_OK_VISUAL,"<S-NAME> order(s) this room to normalcy."); CMLib.map().resetRoom(mob.location()); mob.tell("Done."); } else if(s.equalsIgnoreCase("area")) { Area A=mob.location().getArea(); if(A!=null) { Session S=null; for(int x=0;x<CMLib.sessions().size();x++) { S=CMLib.sessions().elementAt(x); if((S!=null)&&(S.mob()!=null)&&(S.mob().location()!=null)&&(A.inMyMetroArea(S.mob().location().getArea()))) mob.location().show(mob,null,CMMsg.MSG_OK_VISUAL,"<S-NAME> order(s) this area to normalcy."); } CMLib.map().resetArea(A); } mob.tell("Done."); } else if(CMLib.map().getPlayer(s)!=null) { MOB M=CMLib.map().getPlayer(s); String what=""; if(commands.size()>0) what=CMParms.combine(commands,1).toUpperCase(); if(what.startsWith("EXPERTIS")) { while(M.numExpertises()>0) M.delExpertise(M.fetchExpertise(0)); mob.tell("Done."); } else mob.tell("Can't reset that trait -- as its not defined."); } else if(s.equalsIgnoreCase("arearoomids")) { Area A=mob.location().getArea(); boolean somethingDone=false; for(Enumeration e=A.getCompleteMap();e.hasMoreElements();) { Room R=(Room)e.nextElement(); synchronized(("SYNC"+R.roomID()).intern()) { R=CMLib.map().getRoom(R); if((R.roomID().length()>0) &&(R.roomID().indexOf("#")>0) &&(!R.roomID().startsWith(A.Name()))) { String oldID=R.roomID(); R.setRoomID(R.getArea().getNewRoomID(R,-1)); CMLib.database().DBReCreate(R,oldID); try { for(Enumeration r=CMLib.map().rooms();r.hasMoreElements();) { Room R2=(Room)r.nextElement(); R2=CMLib.map().getRoom(R2); if(R2!=R) for(int d=0;d<Directions.NUM_DIRECTIONS;d++) if(R2.rawDoors()[d]==R) { CMLib.database().DBUpdateExits(R2); break; } } }catch(NoSuchElementException nse){} if(R instanceof GridLocale) R.getArea().fillInAreaRoom(R); somethingDone=true; mob.tell("Room "+oldID+" changed to "+R.roomID()+"."); } } } if(!somethingDone) mob.tell("No rooms were found which needed renaming."); else mob.tell("Done renumbering rooms."); } else if(!CMSecurity.isAllowed(mob,mob.location(),"RESETUTILS")) { mob.tell("'"+s+"' is an unknown reset. Try ROOM, AREA, AREAROOMIDS *.\n\r * = Reset functions which may take a long time to complete."); return false; } else if(s.equalsIgnoreCase("propertygarbage")) { Room R=null; LandTitle T=null; for(Enumeration e=CMLib.map().rooms();e.hasMoreElements();) { R=(Room)e.nextElement(); synchronized(("SYNC"+R.roomID()).intern()) { R=CMLib.map().getRoom(R); T=CMLib.law().getLandTitle(R); if((T!=null) &&(T.landOwner().length()==0)) { T.setLandOwner(mob.Name()); T.setLandOwner(""); T.updateLot(CMParms.makeVector(mob.name())); } } } } else if(s.equalsIgnoreCase("genraceagingcharts")) { for(Enumeration e=CMClass.races();e.hasMoreElements();) { Race R=(Race)e.nextElement(); Vector racesToBaseFrom=new Vector(); Race human=CMClass.getRace("Human"); Race halfling=CMClass.getRace("Halfling"); if((R.isGeneric())&&(R.ID().length()>1)&&(!R.ID().endsWith("Race"))&&(Character.isUpperCase(R.ID().charAt(0)))) { int lastStart=0; int c=1; while(c<=R.ID().length()) { if((c==R.ID().length())||(Character.isUpperCase(R.ID().charAt(c)))) { if((lastStart==0)&&(c==R.ID().length())&&(!R.ID().endsWith("ling"))&&(!R.ID().startsWith("Half"))) break; String partial=R.ID().substring(lastStart,c); if(partial.equals("Half")&&(!racesToBaseFrom.contains(human))) { racesToBaseFrom.add(human); lastStart=c; } else { Race R2=CMClass.getRace(partial); if((R2!=null)&&(R2!=R)) { racesToBaseFrom.add(R2); lastStart=c; } else if(partial.endsWith("ling")) { if(!racesToBaseFrom.contains(halfling)) racesToBaseFrom.add(halfling); lastStart=c; R2=CMClass.getRace(partial.substring(0,partial.length()-4)); if(R2!=null) racesToBaseFrom.add(R2); } } if(c==R.ID().length()) break; } c++; } StringBuffer answer=new StringBuffer(R.ID()+": "); for(int i=0;i<racesToBaseFrom.size();i++) answer.append(((Race)racesToBaseFrom.elementAt(i)).ID()+" "); mob.tell(answer.toString()); if(racesToBaseFrom.size()>0) { long[] ageChart=new long[Race.AGE_ANCIENT+1]; for(int i=0;i<racesToBaseFrom.size();i++) { Race R2=(Race)racesToBaseFrom.elementAt(i); int lastVal=0; for(int x=0;x<ageChart.length;x++) { int val=R2.getAgingChart()[x]; if(val>=Integer.MAX_VALUE) val=lastVal+(x*1000); ageChart[x]+=val; lastVal=val; } } for(int x=0;x<ageChart.length;x++) ageChart[x]=ageChart[x]/racesToBaseFrom.size(); int lastVal=0; int thisVal=0; for(int x=0;x<ageChart.length;x++) { lastVal=thisVal; thisVal=(int)ageChart[x]; if(thisVal<lastVal) thisVal+=lastVal; R.getAgingChart()[x]=thisVal; } CMLib.database().DBDeleteRace(R.ID()); CMLib.database().DBCreateRace(R.ID(),R.racialParms()); } } } } else if(s.equalsIgnoreCase("bankdata")) { String bank=CMParms.combine(commands,1); if(bank.length()==0){ mob.tell("Which bank?"); return false; } Vector V=CMLib.database().DBReadJournal(bank); for(int v=0;v<V.size();v++) { Vector V2=(Vector)V.elementAt(v); String name=(String)V2.elementAt(1); String ID=(String)V2.elementAt(4); String classID=((String)V2.elementAt(3)); String data=((String)V2.elementAt(5)); if(ID.equalsIgnoreCase("COINS")) classID="COINS"; Item I=(Item)CMClass.getItem("GenItem").copyOf(); CMLib.database().DBCreateData(name,bank,""+I,classID+";"+data); } CMLib.database().DBDeleteJournal(bank,Integer.MAX_VALUE); mob.tell(V.size()+" records done."); } else if(s.equalsIgnoreCase("mobstats")) { s="room"; if(commands.size()>1) s=(String)commands.elementAt(1); Vector rooms=new Vector(); if(s.toUpperCase().startsWith("ROOM")) rooms.addElement(mob.location()); else if(s.toUpperCase().startsWith("AREA")) { try { for(Enumeration e=mob.location().getArea().getCompleteMap();e.hasMoreElements();) rooms.addElement(e.nextElement()); }catch(NoSuchElementException nse){} } else if(s.toUpperCase().startsWith("WORLD")) { try { for(Enumeration e=CMLib.map().areas();e.hasMoreElements();) { Area A=(Area)e.nextElement(); for(Enumeration r=A.getCompleteMap();r.hasMoreElements();) rooms.addElement(r.nextElement()); } }catch(NoSuchElementException nse){} } else { mob.tell("Try ROOM, AREA, or WORLD."); return false; } for(Enumeration r=rooms.elements();r.hasMoreElements();) { Room R=CMLib.map().getRoom((Room)r.nextElement()); synchronized(("SYNC"+R.roomID()).intern()) { R=CMLib.map().getRoom(R); R.getArea().toggleMobility(false); CMLib.map().resetRoom(R); boolean somethingDone=false; for(int m=0;m<R.numInhabitants();m++) { MOB M=R.fetchInhabitant(m); if((M.savable()) &&(M.getStartRoom()==R)) { MOB M2=M.baseCharStats().getCurrentClass().fillOutMOB(null,M.baseEnvStats().level()); M.baseEnvStats().setAttackAdjustment(M2.baseEnvStats().attackAdjustment()); M.baseEnvStats().setArmor(M2.baseEnvStats().armor()); M.baseEnvStats().setDamage(M2.baseEnvStats().damage()); M.recoverEnvStats(); somethingDone=true; } } if(somethingDone) { mob.tell("Room "+R.roomID()+" done."); CMLib.database().DBUpdateMOBs(R); } R.getArea().toggleMobility(true); } } } else if(s.equalsIgnoreCase("groundlydoors")) { if(mob.session()==null) return false; mob.session().print("working..."); try { for(Enumeration r=CMLib.map().rooms();r.hasMoreElements();) { Room R=(Room)r.nextElement(); boolean changed=false; if(R.roomID().length()>0) for(int d=0;d<Directions.NUM_DIRECTIONS;d++) { Exit E=R.rawExits()[d]; if((E!=null)&&E.hasADoor()&&E.name().equalsIgnoreCase("the ground")) { E.setName("a door"); E.setExitParams("door","close","open","a door, closed."); changed=true; } } if(changed) { Log.sysOut("Reset","Groundly doors in "+R.roomID()+" fixed."); CMLib.database().DBUpdateExits(R); } mob.session().print("."); } }catch(NoSuchElementException nse){} mob.session().println("done!"); } else if(s.equalsIgnoreCase("allmobarmorfix")) { if(mob.session()==null) return false; mob.session().print("working..."); for(Enumeration a=CMLib.map().areas();a.hasMoreElements();) { Area A=(Area)a.nextElement(); A.toggleMobility(false); for(Enumeration r=A.getCompleteMap();r.hasMoreElements();) { Room R=(Room)r.nextElement(); if(R.roomID().length()==0) continue; synchronized(("SYNC"+R.roomID()).intern()) { R=CMLib.map().getRoom(R); CMLib.map().resetRoom(R); boolean didSomething=false; for(int i=0;i<R.numInhabitants();i++) { MOB M=R.fetchInhabitant(i); if((M.isMonster()) &&(M.getStartRoom()==R) &&(M.baseEnvStats().armor()==((100-(M.baseEnvStats().level()*7))))) { int oldArmor=M.baseEnvStats().armor(); M.baseEnvStats().setArmor(M.baseCharStats().getCurrentClass().getLevelArmor(M)); M.recoverEnvStats(); Log.sysOut("Reset","Updated "+M.name()+" in room "+R.roomID()+" from "+oldArmor+" to "+M.baseEnvStats().armor()+"."); didSomething=true; } else Log.sysOut("Reset","Skipped "+M.name()+" in room "+R.roomID()); } mob.session().print("."); if(didSomething) CMLib.database().DBUpdateMOBs(R); } } A.toggleMobility(true); } mob.session().println("done!"); } else if(s.equalsIgnoreCase("goldceilingfixer")) { if(mob.session()==null) return false; mob.session().print("working..."); for(Enumeration a=CMLib.map().areas();a.hasMoreElements();) { Area A=(Area)a.nextElement(); A.toggleMobility(false); for(Enumeration r=A.getCompleteMap();r.hasMoreElements();) { Room R=(Room)r.nextElement(); if(R.roomID().length()==0) continue; synchronized(("SYNC"+R.roomID()).intern()) { R=CMLib.map().getRoom(R); CMLib.map().resetRoom(R); boolean didSomething=false; for(int i=0;i<R.numInhabitants();i++) { MOB M=R.fetchInhabitant(i); if((M.isMonster()) &&(M.getStartRoom()==R) &&(CMLib.beanCounter().getMoney(M)>(M.baseEnvStats().level()+1))) { CMLib.beanCounter().setMoney(M,CMLib.dice().roll(1,M.baseEnvStats().level(),0)+CMLib.dice().roll(1,10,0)); Log.sysOut("Reset","Updated "+M.name()+" in room "+R.roomID()+"."); didSomething=true; } } mob.session().print("."); if(didSomething) CMLib.database().DBUpdateMOBs(R); } } A.toggleMobility(true); } mob.session().println("done!"); } else if(s.equalsIgnoreCase("areainstall")) { if(mob.session()==null) return false; if(commands.size()<2) { mob.tell("You need to specify a property or behavior to install."); return false; } String ID=(String)commands.elementAt(1); Object O=CMClass.getAbility(ID); if(O==null) O=CMClass.getBehavior(ID); if(O==null) { mob.tell("'"+ID+"' is not a known property or behavior. Try LIST."); return false; } mob.session().print("working..."); for(Enumeration r=CMLib.map().areas();r.hasMoreElements();) { Area A=(Area)r.nextElement(); boolean changed=false; if((O instanceof Behavior)) { Behavior B=A.fetchBehavior(((Behavior)O).ID()); if(B==null) { B=(Behavior)((Behavior)O).copyOf(); B.setParms(CMParms.combine(commands,2)); A.addBehavior(B); changed=true; } else if(!B.getParms().equals(CMParms.combine(commands,2))) { B.setParms(CMParms.combine(commands,2)); changed=true; } } else if(O instanceof Ability) { Ability B=A.fetchEffect(((Ability)O).ID()); if(B==null) { B=(Ability)((Ability)O).copyOf(); B.setMiscText(CMParms.combine(commands,2)); A.addNonUninvokableEffect(B); changed=true; } else if(!B.text().equals(CMParms.combine(commands,2))) { B.setMiscText(CMParms.combine(commands,2)); changed=true; } } if(changed) { CMLib.database().DBUpdateArea(A.Name(),A); mob.session().print("."); } } mob.session().println("done!"); } else if(s.equalsIgnoreCase("worldmatconfirm")) { if(mob.session()==null) return false; mob.session().print("working..."); for(Enumeration a=CMLib.map().areas();a.hasMoreElements();) { Area A=(Area)a.nextElement(); A.toggleMobility(false); for(Enumeration r=A.getCompleteMap();r.hasMoreElements();) { Room R=(Room)r.nextElement(); if(R.roomID().length()>0) { synchronized(("SYNC"+R.roomID()).intern()) { R=CMLib.map().getRoom(R); CMLib.map().resetRoom(R); boolean changedMOBS=false; boolean changedItems=false; for(int i=0;i<R.numItems();i++) changedItems=changedItems||(rightImportMat(null,R.fetchItem(i),false)>=0); for(int m=0;m<R.numInhabitants();m++) { MOB M=R.fetchInhabitant(m); if(M==mob) continue; if(!M.savable()) continue; for(int i=0;i<M.inventorySize();i++) changedMOBS=changedMOBS||(rightImportMat(null,M.fetchInventory(i),false)>=0); ShopKeeper SK=CMLib.coffeeShops().getShopKeeper(M); if(SK!=null) { Vector V=SK.getShop().getStoreInventory(); for(int i=V.size()-1;i>=0;i--) { Environmental E=(Environmental)V.elementAt(i); if(E instanceof Item) { Item I=(Item)E; boolean didSomething=false; didSomething=rightImportMat(null,I,false)>=0; changedMOBS=changedMOBS||didSomething; if(didSomething) { int numInStock=SK.getShop().numberInStock(I); int stockPrice=SK.getShop().stockPrice(I); SK.getShop().delAllStoreInventory(I,SK.whatIsSold()); SK.getShop().addStoreInventory(I,numInStock,stockPrice,SK); } } } } } if(changedItems) CMLib.database().DBUpdateItems(R); if(changedMOBS) CMLib.database().DBUpdateMOBs(R); mob.session().print("."); } } } A.toggleMobility(true); } mob.session().println("done!"); } else if(s.equalsIgnoreCase("worlditemfixer")) { if(mob.session()==null) return false; mob.session().print("working..."); for(Enumeration a=CMLib.map().areas();a.hasMoreElements();) { Area A=(Area)a.nextElement(); A.toggleMobility(false); for(Enumeration r=A.getCompleteMap();r.hasMoreElements();) { Room R=(Room)r.nextElement(); if(R.roomID().length()>0) { synchronized(("SYNC"+R.roomID()).intern()) { R=CMLib.map().getRoom(R); CMLib.map().resetRoom(R); boolean changedMOBS=false; boolean changedItems=false; for(int i=0;i<R.numItems();i++) { Item I=R.fetchItem(i); if(CMLib.itemBuilder().itemFix(I)) changedItems=true; } for(int m=0;m<R.numInhabitants();m++) { MOB M=R.fetchInhabitant(m); if(M==mob) continue; if(!M.savable()) continue; for(int i=0;i<M.inventorySize();i++) { Item I=M.fetchInventory(i); if(CMLib.itemBuilder().itemFix(I)) changedMOBS=true; } ShopKeeper SK=CMLib.coffeeShops().getShopKeeper(M); if(SK!=null) { Vector V=SK.getShop().getStoreInventory(); for(int i=V.size()-1;i>=0;i--) { Environmental E=(Environmental)V.elementAt(i); if(E instanceof Item) { Item I=(Item)E; boolean didSomething=false; didSomething=CMLib.itemBuilder().itemFix(I); changedMOBS=changedMOBS||didSomething; if(didSomething) { int numInStock=SK.getShop().numberInStock(I); int stockPrice=SK.getShop().stockPrice(I); SK.getShop().delAllStoreInventory(I,SK.whatIsSold()); SK.getShop().addStoreInventory(I,numInStock,stockPrice,SK); } } } } } if(changedItems) CMLib.database().DBUpdateItems(R); if(changedMOBS) CMLib.database().DBUpdateMOBs(R); mob.session().print("."); } } } A.toggleMobility(true); } mob.session().println("done!"); } else if(s.startsWith("clantick")) CMLib.clans().tickAllClans(); else if(s.equalsIgnoreCase("arearacemat")) { // this is just utility code and will change frequently Area A=mob.location().getArea(); CMLib.map().resetArea(A); A.toggleMobility(false); Hashtable rememberI=new Hashtable(); Hashtable rememberM=new Hashtable(); try{ for(Enumeration r=A.getCompleteMap();r.hasMoreElements();) { Room R=(Room)r.nextElement(); if(R.roomID().length()>0) synchronized(("SYNC"+R.roomID()).intern()) { R=CMLib.map().getRoom(R); CMLib.map().resetRoom(R); boolean somethingDone=false; mob.tell(R.roomID()+"/"+R.name()+"/"+R.displayText()+"--------------------"); for(int i=R.numItems()-1;i>=0;i--) { Item I=R.fetchItem(i); if(I.ID().equalsIgnoreCase("GenWallpaper")) continue; int returned=resetAreaOramaManaI(mob,I,rememberI," "); if(returned<0) { R.delItem(I); somethingDone=true; mob.tell(" deleted"); } else if(returned>0) somethingDone=true; } if(somethingDone) CMLib.database().DBUpdateItems(R); somethingDone=false; for(int m=0;m<R.numInhabitants();m++) { MOB M=R.fetchInhabitant(m); if(M==mob) continue; if(!M.savable()) continue; Race R2=(Race)rememberM.get(M.Name()); if(R2!=null) { if(M.charStats().getMyRace()==R2) mob.tell(" "+M.Name()+" still "+R2.name()); else { M.baseCharStats().setMyRace(R2); R2.setHeightWeight(M.baseEnvStats(),(char)M.baseCharStats().getStat(CharStats.STAT_GENDER)); M.recoverCharStats(); M.recoverEnvStats(); mob.tell(" "+M.Name()+" Changed to "+R2.ID()); somethingDone=true; } } else while(true) { String str=mob.session().prompt(" "+M.Name()+"/"+M.charStats().getMyRace().ID(),""); if(str.length()==0) { rememberM.put(M.name(),M.baseCharStats().getMyRace()); break; } if(str.equals("?")) mob.tell(M.Name()+"/"+M.displayText()+"/"+M.description()); else { R2=CMClass.getRace(str); if(R2==null) { String poss=""; if(poss.length()==0) for(Enumeration e=CMClass.races();e.hasMoreElements();) { Race R3=(Race)e.nextElement(); if(R3.ID().toUpperCase().startsWith(str.toUpperCase())) poss=R3.name(); } if(poss.length()==0) for(Enumeration e=CMClass.races();e.hasMoreElements();) { Race R3=(Race)e.nextElement(); if(R3.ID().toUpperCase().indexOf(str.toUpperCase())>=0) poss=R3.name(); } if(poss.length()==0) for(Enumeration e=CMClass.races();e.hasMoreElements();) { Race R3=(Race)e.nextElement(); if(R3.name().toUpperCase().startsWith(str.toUpperCase())) poss=R3.name(); } if(poss.length()==0) for(Enumeration e=CMClass.races();e.hasMoreElements();) { Race R3=(Race)e.nextElement(); if(R3.name().toUpperCase().indexOf(str.toUpperCase())>=0) poss=R3.name(); } mob.tell(" '"+str+"' is not a valid race. Try '"+poss+"'."); continue; } mob.tell(" Changed to "+R2.ID()); M.baseCharStats().setMyRace(R2); R2.setHeightWeight(M.baseEnvStats(),(char)M.baseCharStats().getStat(CharStats.STAT_GENDER)); M.recoverCharStats(); M.recoverEnvStats(); rememberM.put(M.name(),M.baseCharStats().getMyRace()); somethingDone=true; break; } } for(int i=M.inventorySize()-1;i>=0;i--) { Item I=M.fetchInventory(i); int returned=resetAreaOramaManaI(mob,I,rememberI," "); if(returned<0) { M.delInventory(I); somethingDone=true; mob.tell(" deleted"); } else if(returned>0) somethingDone=true; } ShopKeeper SK=CMLib.coffeeShops().getShopKeeper(M); if(SK!=null) { Vector V=SK.getShop().getStoreInventory(); for(int i=V.size()-1;i>=0;i--) { Environmental E=(Environmental)V.elementAt(i); if(E instanceof Item) { Item I=(Item)E; int returned=resetAreaOramaManaI(mob,I,rememberI," - "); if(returned<0) { SK.getShop().delAllStoreInventory(I,SK.whatIsSold()); somethingDone=true; mob.tell(" deleted"); } else if(returned>0) { somethingDone=true; int numInStock=SK.getShop().numberInStock(I); int stockPrice=SK.getShop().stockPrice(I); SK.getShop().delAllStoreInventory(I,SK.whatIsSold()); SK.getShop().addStoreInventory(I,numInStock,stockPrice,SK); } } } } if(M.fetchAbility("Chopping")!=null) { somethingDone=true; M.delAbility(M.fetchAbility("Chopping")); } for(int i=0;i<M.numBehaviors();i++) { Behavior B=M.fetchBehavior(i); if((B.ID().equalsIgnoreCase("Mobile")) &&(B.getParms().trim().length()>0)) { somethingDone=true; B.setParms(""); } } } if(somethingDone) CMLib.database().DBUpdateMOBs(R); } } } catch(java.io.IOException e){} A.toggleMobility(true); mob.tell("Done."); } else mob.tell("'"+s+"' is an unknown reset. Try ROOM, AREA, MOBSTATS ROOM, MOBSTATS AREA *, MOBSTATS WORLD *, AREARACEMAT *, AREAROOMIDS *, AREAINSTALL.\n\r * = Reset functions which may take a long time to complete."); return false; } }