package com.planet_ink.coffee_mud.WebMacros; 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.Libraries.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 ItemData extends StdWebMacro { public String name() {return this.getClass().getName().substring(this.getClass().getName().lastIndexOf('.')+1);} public static DVector sortedResources=new DVector(2); private static final String[] okparms={ "NAME","CLASSES","DISPLAYTEXT","DESCRIPTION", "LEVEL","ABILITY","REJUV","MISCTEXT", "MATERIALS","ISGENERIC","ISFOOD","NOURISHMENT", "ISDRINK","LIQUIDHELD","QUENCHED","ISCONTAINER", "CAPACITY","ISARMOR","ARMOR","WORNDATA", "HEIGHT","ISWEAPON","WEAPONTYPE","WEAPONCLASS", "ATTACK","DAMAGE","MINRANGE","MAXRANGE", "SECRETIDENTITY","ISGETTABLE","ISREMOVABLE","ISDROPPABLE", "ISTWOHANDED","ISTRAPPED","READABLESPELLS","ISWAND", "USESREMAIN","VALUE","WEIGHT","ISMAP", "MAPAREAS","ISREADABLE","ISPILL","ISSUPERPILL", "ISPOTION","LIQUIDTYPES","AMMOTYPE","AMMOCAP", "READABLESPELL","ISRIDEABLE","RIDEABLETYPE","MOBSHELD", "HASALID","HASALOCK","KEYCODE","ISWALLPAPER", "READABLETEXT","CONTAINER","ISLIGHTSOURCE","DURATION", "ISUNTWOHANDED","ISCOIN","ISSCROLL","BEINGWORN","NONLOCATABLE", "ISKEY", "CONTENTTYPES","ISINSTRUMENT","INSTRUMENTTYPE", "ISAMMO","ISMOBITEM","ISDUST","ISPERFUME","SMELLS", "IMAGE","ISEXIT","EXITNAME","EXITCLOSEDTEXT","NUMCOINS", "CURRENCY","DENOM","ISRECIPE","RECIPESKILL","RECIPEDATA", "LAYER","SEETHRU","MULTIWEAR"}; public ItemData() { super(); if(sortedResources.size()==0) for(int r=0;r<RawMaterial.RESOURCE_DESCS.length;r++) { Long L=new Long(RawMaterial.RESOURCE_DATA[r][0]); String S=RawMaterial.RESOURCE_DESCS[r]; int putHere=0; for(putHere=0;putHere<sortedResources.size();putHere++) if(S.compareTo((String)sortedResources.elementAt(putHere,2))<0) break; if(putHere>=sortedResources.size()) sortedResources.addElement(L,S); else sortedResources.insertElementAt(putHere,L,S); } } public String runMacro(ExternalHTTPRequests httpReq, String parm) { Hashtable parms=parseParms(parm); String player=httpReq.getRequestParameter("PLAYER"); String last=httpReq.getRequestParameter("ROOM"); if((last==null)&&(player==null)) return " @break@"; String itemCode=httpReq.getRequestParameter("ITEM"); if(itemCode==null) return "@break@"; if(!CMProps.getBoolVar(CMProps.SYSTEMB_MUDSTARTED)) return CMProps.getVar(CMProps.SYSTEM_MUDSTATUS); String mobNum=httpReq.getRequestParameter("MOB"); MOB playerM=null; Room R=null; if(player!=null) playerM=CMLib.map().getLoadPlayer(player); else R=(Room)httpReq.getRequestObjects().get(last); if((R==null)&&(player==null)) { R=CMLib.map().getRoom(last); if(R==null) return "No Room?!"; CMLib.map().resetRoom(R); httpReq.getRequestObjects().put(last,R); } Item I=null; MOB M=null; String sync=("SYNC"+((R!=null)?R.roomID():player)); synchronized(sync.intern()) { if(R!=null) R=CMLib.map().getRoom(R); if((playerM!=null)&&(R==null)) { I=(Item)httpReq.getRequestObjects().get("PLAYER/"+player+"/"+itemCode); if(I==null) { if(itemCode.equals("NEW")) I=CMClass.getItem("GenItem"); else I=RoomData.getItemFromCode(playerM,itemCode); if(I!=null) httpReq.getRequestObjects().put("PLAYER/"+player+"/"+itemCode,I); } M=playerM; } else if((mobNum!=null)&&(mobNum.length()>0)) { M=(MOB)httpReq.getRequestObjects().get(R.roomID()+"/"+mobNum); if(M==null) { M=RoomData.getMOBFromCode(R,mobNum); if(M==null) { StringBuffer str=new StringBuffer("No MOB?!"); str.append(" Got: "+mobNum); str.append(", Includes: "); for(int m=0;m<R.numInhabitants();m++) { MOB M2=R.fetchInhabitant(m); if((M2!=null)&&(M2.savable())) str.append(M2.Name()+"="+RoomData.getMOBCode(R,M2)); } return clearWebMacros(str); } httpReq.getRequestObjects().put(R.roomID()+"/"+mobNum,M); } I=(Item)httpReq.getRequestObjects().get(R.roomID()+"/"+mobNum+"/"+itemCode); if(I==null) { if(itemCode.equals("NEW")) I=CMClass.getItem("GenItem"); else I=RoomData.getItemFromCode(M,itemCode); if(I!=null) httpReq.getRequestObjects().put(R.roomID()+"/"+mobNum+"/"+itemCode,I); } } else { I=(Item)httpReq.getRequestObjects().get(R.roomID()+"/"+itemCode); if(I==null) { if(itemCode.equals("NEW")) I=CMClass.getItem("GenItem"); else I=RoomData.getItemFromCode(R,itemCode); if(I!=null) httpReq.getRequestObjects().put(R.roomID()+"/"+itemCode,I); } } } if(I==null) { StringBuffer str=new StringBuffer("No Item?!"); str.append(" Got: "+itemCode); str.append(", Includes: "); if(M==null) for(int i=0;i<R.numItems();i++) { Item I2=R.fetchItem(i); if(I2!=null) str.append(I2.Name()+"="+RoomData.getItemCode(R,I2)); } else for(int i=0;i<M.inventorySize();i++) { Item I2=M.fetchInventory(i); if(I2!=null) str.append(RoomData.getItemCode(M,I2)); } return clearWebMacros(str); } Item oldI=I; // important generic<->non generic swap! String newClassID=httpReq.getRequestParameter("CLASSES"); if((newClassID!=null) &&(!newClassID.equals(CMClass.classID(I))) &&(CMClass.getItem(newClassID)!=null)) { I=CMClass.getItem(newClassID); if(I instanceof ArchonOnly) I=oldI; } boolean changedClass=(((httpReq.isRequestParameter("CHANGEDCLASS"))&&(httpReq.getRequestParameter("CHANGEDCLASS")).equals("true"))&&(itemCode.equals("NEW"))); boolean changedLevel=(httpReq.isRequestParameter("CHANGEDLEVEL"))&&(httpReq.getRequestParameter("CHANGEDLEVEL")).equals("true"); if((changedLevel)&&(I.isGeneric())) { int level=CMath.s_int(httpReq.getRequestParameter("LEVEL")); int material=CMath.s_int(httpReq.getRequestParameter("MATERIALS")); int weight=CMath.s_int(httpReq.getRequestParameter("WEIGHT")); int hands=1; if(httpReq.isRequestParameter("ISTWOHANDED")&&(httpReq.getRequestParameter("ISTWOHANDED").equalsIgnoreCase("on"))) hands=2; Hashtable vals=null; if(I instanceof Weapon) { int wclass=CMath.s_int(httpReq.getRequestParameter("WEAPONCLASS")); int reach=CMath.s_int(httpReq.getRequestParameter("MINRANGE")); vals=CMLib.itemBuilder().timsItemAdjustments(I, level, material, weight, hands, wclass, reach, 0); } else { long worndata=I.rawProperLocationBitmap(); if(httpReq.isRequestParameter("WORNDATA")) { worndata=CMath.s_int(httpReq.getRequestParameter("WORNDATA")); for(int i=1;;i++) if(httpReq.isRequestParameter("WORNDATA"+(new Integer(i).toString()))) worndata=worndata|CMath.s_int(httpReq.getRequestParameter("WORNDATA"+(new Integer(i).toString()))); else break; } vals=CMLib.itemBuilder().timsItemAdjustments(I, level, material, weight, hands, 0, 0, worndata); } for(Enumeration e=vals.keys();e.hasMoreElements();) { String key=(String)e.nextElement(); String val=(String)vals.get(key); httpReq.addRequestParameters(key,val); } } boolean firstTime=(!httpReq.isRequestParameter("ACTION")) ||(!(httpReq.getRequestParameter("ACTION")).equals("MODIFYITEM")) ||changedClass; if(I!=null) { StringBuffer str=new StringBuffer(""); for(int o=0;o<okparms.length;o++) if(parms.containsKey(okparms[o])) { String old=httpReq.getRequestParameter(okparms[o]); if(old==null) old=""; switch(o) { case 0: // name if(firstTime) old=I.Name(); str.append(old); break; case 1: // classes { if(firstTime) old=CMClass.classID(I); Object[] sorted=(Object[])Resources.getResource("MUDGRINDER-ITEMS2"); if(sorted==null) { Vector sortMe=new Vector(); CMClass.addAllItemClassNames(sortMe,true,false); sorted=(new TreeSet(sortMe)).toArray(); Resources.submitResource("MUDGRINDER-ITEMS2",sorted); } for(int r=0;r<sorted.length;r++) { String cnam=(String)sorted[r]; str.append("<OPTION VALUE=\""+cnam+"\""); if(old.equals(cnam)) str.append(" SELECTED"); str.append(">"+cnam); } } break; case 2: // displaytext if(firstTime) old=I.displayText(); str.append(old); break; case 3: // description if(firstTime) old=I.description(); str.append(old); break; case 4: // level if(firstTime) old=""+I.baseEnvStats().level(); str.append(old); break; case 5: // ability; if(firstTime) old=""+I.baseEnvStats().ability(); str.append(old); break; case 6: // rejuv; if(firstTime) old=""+I.baseEnvStats().rejuv(); if(old.equals(""+Integer.MAX_VALUE)) str.append("0"); else str.append(old); break; case 7: // misctext if(firstTime) old=I.text(); str.append(old); break; case 8: // materials if(firstTime) old=""+I.material(); for(int r=0;r<sortedResources.size();r++) { str.append("<OPTION VALUE=\""+((Long)sortedResources.elementAt(r,1)).longValue()+"\""); if(((Long)sortedResources.elementAt(r,1)).intValue()==CMath.s_int(old)) str.append(" SELECTED"); str.append(">"+((String)sortedResources.elementAt(r,2))); } break; case 9: // is generic if(I.isGeneric()) return "true"; return "false"; case 10: // is food if(I instanceof Food) return "true"; return "false"; case 11: // nourishment if((firstTime)&&(I instanceof Food)) old=""+((Food)I).nourishment(); str.append(old); break; case 12: // is drink if(I instanceof Drink) return "true"; return "false"; case 13: // liquid held if((firstTime)&&(I instanceof Drink)) old=""+((Drink)I).liquidHeld(); str.append(old); break; case 14: // quenched if((firstTime)&&(I instanceof Drink)) old=""+((Drink)I).thirstQuenched(); str.append(old); break; case 15: // is container if(I instanceof Container) return "true"; return "false"; case 16: // capacity if((firstTime)&&(I instanceof Container)) old=""+((Container)I).capacity(); str.append(old); break; case 17: // is armor if(I instanceof Armor) return "true"; return "false"; case 18: // armor if(firstTime) old=""+I.baseEnvStats().armor(); str.append(old); break; case 19: // worn data { long climate=I.rawProperLocationBitmap(); if(httpReq.isRequestParameter("WORNDATA")) { climate=CMath.s_int(httpReq.getRequestParameter("WORNDATA")); for(int i=1;;i++) if(httpReq.isRequestParameter("WORNDATA"+(new Integer(i).toString()))) climate=climate|CMath.s_int(httpReq.getRequestParameter("WORNDATA"+(new Integer(i).toString()))); else break; } for(int i=1;i<Item.WORN_DESCS.length;i++) { String climstr=Item.WORN_DESCS[i]; int mask=(int)CMath.pow(2,i-1); str.append("<OPTION VALUE="+mask); if((climate&mask)>0) str.append(" SELECTED"); str.append(">"+climstr); } } break; case 20: // height if(firstTime) old=""+I.baseEnvStats().height(); str.append(old); break; case 21: // is weapon if(I instanceof Weapon) return "true"; return "false"; case 22: // weapon type if((firstTime)&&(I instanceof Weapon)) old=""+((Weapon)I).weaponType(); for(int r=0;r<Weapon.typeDescription.length;r++) { str.append("<OPTION VALUE=\""+r+"\""); if(r==CMath.s_int(old)) str.append(" SELECTED"); str.append(">"+Weapon.typeDescription[r]); } break; case 23: // weapon class if((firstTime)&&(I instanceof Weapon)) old=""+((Weapon)I).weaponClassification(); for(int r=0;r<Weapon.classifictionDescription.length;r++) { str.append("<OPTION VALUE=\""+r+"\""); if(r==CMath.s_int(old)) str.append(" SELECTED"); str.append(">"+Weapon.classifictionDescription[r]); } break; case 24: // attack if(firstTime) old=""+I.baseEnvStats().attackAdjustment(); str.append(old); break; case 25: // damage if(firstTime) old=""+I.baseEnvStats().damage(); str.append(old); break; case 26: // min range if(firstTime) old=""+I.minRange(); str.append(old); break; case 27: // max range if(firstTime) old=""+I.maxRange(); str.append(old); break; case 28: // secret identity if(firstTime) old=I.rawSecretIdentity(); str.append(old); break; case 29: // is gettable if(firstTime) old=(!CMath.bset(I.baseEnvStats().sensesMask(),EnvStats.SENSE_ITEMNOTGET))?"checked":""; else if(old.equals("on")) old="checked"; str.append(old); break; case 30: // is removable if(firstTime) old=(!CMath.bset(I.baseEnvStats().sensesMask(),EnvStats.SENSE_ITEMNOREMOVE))?"checked":""; else if(old.equals("on")) old="checked"; str.append(old); break; case 31: // is droppable if(firstTime) old=(!CMath.bset(I.baseEnvStats().sensesMask(),EnvStats.SENSE_ITEMNODROP))?"checked":""; else if(old.equals("on")) old="checked"; str.append(old); break; case 32: // is two handed if(firstTime) old=I.rawLogicalAnd()?"checked":""; else if(old.equals("on")) old="checked"; str.append(old); break; case 33: // is trapped break; case 34: // readable spells { if(I instanceof SpellHolder) old=";"+((SpellHolder)I).getSpellList(); if(httpReq.isRequestParameter("READABLESPELLS")) { old=";"+httpReq.getRequestParameter("READABLESPELLS"); for(int i=1;;i++) if(httpReq.isRequestParameter("READABLESPELLS"+(new Integer(i).toString()))) old+=";"+httpReq.getRequestParameter("READABLESPELLS"+(new Integer(i).toString())); else break; } old=old.toUpperCase()+";"; for(Enumeration a=CMClass.abilities();a.hasMoreElements();) { String cnam=((Ability)a.nextElement()).ID(); str.append("<OPTION VALUE=\""+cnam+"\""); if(old.indexOf(";"+cnam.toUpperCase()+";")>=0) str.append(" SELECTED"); str.append(">"+cnam); } } break; case 35: // is wand if(I instanceof Wand) return "true"; return "false"; case 36: // uses if(firstTime) old=""+I.usesRemaining(); str.append(old); break; case 37: // value if(firstTime) old=""+I.baseGoldValue(); str.append(old); break; case 38: // weight if(firstTime) old=""+I.baseEnvStats().weight(); str.append(old); break; case 39: // is map if(I instanceof com.planet_ink.coffee_mud.Items.interfaces.Map) return "true"; return "false"; case 40: // map areas { String mask=";"+I.readableText(); if(httpReq.isRequestParameter("MAPAREAS")) { mask=";"+httpReq.getRequestParameter("MAPAREAS"); for(int i=1;;i++) if(httpReq.isRequestParameter("MAPAREAS"+(new Integer(i).toString()))) mask+=";"+httpReq.getRequestParameter("MAPAREAS"+(new Integer(i).toString())); else break; } mask=mask.toUpperCase()+";"; for(Enumeration a=CMLib.map().sortedAreas();a.hasMoreElements();) { Area A2=(Area)a.nextElement(); str.append("<OPTION VALUE=\""+A2.Name()+"\""); if(mask.indexOf(";"+A2.Name().toUpperCase()+";")>=0) str.append(" SELECTED"); str.append(">"+A2.name()); } } break; case 41: // is readable if(firstTime) old=(CMath.bset(I.baseEnvStats().sensesMask(),EnvStats.SENSE_ITEMREADABLE))?"checked":""; else if(old.equals("on")) old="checked"; str.append(old); break; case 42: // is pill if(I instanceof Pill) return "true"; return "false"; case 43: // is super pill if((I instanceof Pill)&&(CMClass.classID(I).indexOf("SuperPill")>0)) return "true"; return "false"; case 44: // is potion if(I instanceof Potion) return "true"; return "false"; case 45: // liquid types if((firstTime)&&(I instanceof Drink)) old=""+((Drink)I).liquidType(); for(int r=0;r<RawMaterial.RESOURCE_DESCS.length;r++) { if((RawMaterial.RESOURCE_DATA[r][0]&RawMaterial.MATERIAL_MASK)==RawMaterial.MATERIAL_LIQUID) { str.append("<OPTION VALUE=\""+RawMaterial.RESOURCE_DATA[r][0]+"\""); if(r==CMath.s_int(old)) str.append(" SELECTED"); str.append(">"+RawMaterial.RESOURCE_DESCS[r]); } } break; case 46: // ammo types if(firstTime) { if(I instanceof Ammunition) old=""+((Ammunition)I).ammunitionType(); else if(I instanceof Weapon) old=""+((Weapon)I).ammunitionType(); } str.append(old); break; case 47: // ammo capacity if((firstTime)&&(I instanceof Weapon)) old=""+((Weapon)I).ammunitionCapacity(); str.append(old); break; case 48: // readable spell { if((firstTime)&&(I instanceof Wand)) old=""+((((Wand)I).getSpell()!=null)?((Wand)I).getSpell().ID():""); for(Enumeration a=CMClass.abilities();a.hasMoreElements();) { String cnam=((Ability)a.nextElement()).ID(); str.append("<OPTION VALUE=\""+cnam+"\""); if(old.equals(cnam)) str.append(" SELECTED"); str.append(">"+cnam); } } break; case 49: // is rideable if(I instanceof Rideable) return "true"; return "false"; case 50: // rideable type if((firstTime)&&(I instanceof Rideable)) old=""+((Rideable)I).rideBasis(); for(int r=0;r<Rideable.RIDEABLE_DESCS.length;r++) { str.append("<OPTION VALUE=\""+r+"\""); if(r==CMath.s_int(old)) str.append(" SELECTED"); str.append(">"+Rideable.RIDEABLE_DESCS[r]); } break; case 51: // rideable capacity if((firstTime)&&(I instanceof Rideable)) old=""+((Rideable)I).riderCapacity(); str.append(old); break; case 52: // has a lid if((firstTime)&&(I instanceof Container)) old=((Container)I).hasALid()?"checked":""; else if(old.equals("on")) old="checked"; str.append(old); break; case 53: // has a lock if((firstTime)&&(I instanceof Container)) old=((Container)I).hasALock()?"checked":""; else if(old.equals("on")) old="checked"; str.append(old); break; case 54: // key code if((firstTime)&&(I instanceof Container)) old=""+((Container)I).keyName(); str.append(old); break; case 55: // is wallpaper if(CMClass.classID(I).indexOf("GenWallpaper")>0) return "true"; return "false"; case 56: // readabletext if(firstTime) old=""+I.readableText(); str.append(old); break; case 57: Vector oldContents=new Vector(); if(oldI instanceof Container) oldContents=((Container)oldI).getContents(); if(M==null) { if((firstTime)&&(I.container()!=null)) old=""+RoomData.getItemCode(R,I.container()); else old=(firstTime)?"":old; str.append("<OPTION VALUE=\"\" "+((old.length()==0)?"SELECTED":"")+">Inventory"); for(int i=0;i<R.numItems();i++) { Item I2=R.fetchItem(i); if((I2!=I)&&(I2!=oldI)&&(I2 instanceof Container)&&(!oldContents.contains(I2))) { str.append("<OPTION VALUE=\""+RoomData.getItemCode(R,I2)+"\""); if(old.equals(RoomData.getItemCode(R,I2))) str.append(" SELECTED"); str.append(">"+I2.Name()+" ("+I2.ID()+")"+((I2.container()==null)?"":(" in "+I2.container().Name()))); } } } else { if((firstTime)&&(I.container()!=null)) old=""+RoomData.getItemCode(M,I.container()); else old=(firstTime)?"":old; str.append("<OPTION VALUE=\"\" "+((old.length()==0)?"SELECTED":"")+">Inventory"); for(int i=0;i<M.inventorySize();i++) { Item I2=M.fetchInventory(i); if((I2!=I)&&(I2!=I)&&(I2 instanceof Container)&&(!oldContents.contains(I2))) { str.append("<OPTION VALUE=\""+RoomData.getItemCode(M,I2)+"\""); if(old.equals(RoomData.getItemCode(M,I2))) str.append(" SELECTED"); str.append(">"+I2.Name()+" ("+I2.ID()+")"+((I2.container()==null)?"":(" in "+I2.container().Name()))); } } } break; case 58: // is light if(I instanceof Light) return "true"; return "false"; case 59: if((firstTime)&&(I instanceof Light)) old=""+((Light)I).getDuration(); str.append(old); break; case 60: // is two handed if(firstTime) old=I.rawLogicalAnd()?"":"checked"; else { old=httpReq.getRequestParameter("ISTWOHANDED"); if(old==null) old=""; if(old.equals("")) old="checked"; } str.append(old); break; case 61: if(I instanceof Coins) return "true"; return "false"; case 62: if(I instanceof Scroll) return "true"; return "false"; case 63: // being worn if(firstTime) old=I.amWearingAt(Item.IN_INVENTORY)?"":"checked"; else if(old.equals("on")) old="checked"; str.append(old); break; case 64: // non-locatable if(firstTime) old=CMLib.flags().canBeLocated(I)?"":"checked"; else if(old.equals("on")) old="checked"; str.append(old); break; case 65: // is key if(I instanceof Key) return "true"; return "false"; case 66: // content types if(I instanceof Container) { long contains=((Container)I).containTypes(); if(httpReq.isRequestParameter("CONTENTTYPES")) { contains=CMath.s_long(httpReq.getRequestParameter("CONTENTTYPES")); if(contains>0) for(int i=1;;i++) if(httpReq.isRequestParameter("CONTENTTYPES"+(new Integer(i).toString()))) contains=contains|CMath.s_int(httpReq.getRequestParameter("CONTENTTYPES"+(new Integer(i).toString()))); else break; } str.append("<OPTION VALUE=0"); if(contains==0) str.append(" SELECTED"); str.append(">"+Container.CONTAIN_DESCS[0]); for(int i=1;i<Container.CONTAIN_DESCS.length;i++) { String constr=Container.CONTAIN_DESCS[i]; int mask=(int)CMath.pow(2,i-1); str.append("<OPTION VALUE="+mask); if((contains&mask)>0) str.append(" SELECTED"); str.append(">"+constr); } } break; case 67: // is instrument if(I instanceof MusicalInstrument) return "true"; return "false"; case 68: // instrument types if((firstTime)&&(I instanceof MusicalInstrument)) old=""+((MusicalInstrument)I).instrumentType(); for(int r=0;r<MusicalInstrument.TYPE_DESC.length;r++) { str.append("<OPTION VALUE=\""+r+"\""); if(r==CMath.s_int(old)) str.append(" SELECTED"); str.append(">"+MusicalInstrument.TYPE_DESC[r]); } break; case 69: // is ammunition if(I instanceof Ammunition) return "true"; return "false"; case 70: // is mob item if(M!=null) return "true"; return "false"; case 71: // is dust if(I instanceof MagicDust) return "true"; return "false"; case 72: // is perfume if(I instanceof Perfume) return "true"; return "false"; case 73: // smells if((firstTime)&&(I instanceof Perfume)) old=""+((Perfume)I).getSmellList(); str.append(old); break; case 74: // image if(firstTime) old=I.rawImage(); str.append(old); break; case 75: // is exit if(I instanceof Exit) return "true"; return "false"; case 76: // exit name if((firstTime)&&(I instanceof Exit)) old=""+((Exit)I).doorName(); str.append(old); break; case 77: // exit closed text if((firstTime)&&(I instanceof Exit)) old=""+((Exit)I).closedText(); str.append(old); break; case 78: // numcoins if((firstTime)&&(I instanceof Coins)) old=""+((Coins)I).getNumberOfCoins(); str.append(old); break; case 79: // currency { if((firstTime)&&(I instanceof Coins)) old=""+((Coins)I).getCurrency(); Vector cs=CMLib.beanCounter().getAllCurrencies(); str.append("<OPTION VALUE=\"\""); if(old.length()==0) str.append(" SELECTED"); str.append(">Default currency"); for(int i=0;i<cs.size();i++) { if(((String)cs.elementAt(i)).length()>0) { str.append("<OPTION VALUE=\""+((String)cs.elementAt(i))+"\""); if(((String)cs.elementAt(i)).equalsIgnoreCase(old)) str.append(" SELECTED"); str.append(">"+((String)cs.elementAt(i))); } } break; } case 80: // denomination { String currency=(I instanceof Coins)?currency=((Coins)I).getCurrency():""; if((firstTime)&&(I instanceof Coins)) old=""+((Coins)I).getDenomination(); DVector cs=CMLib.beanCounter().getCurrencySet(currency); for(int i=0;i<cs.size();i++) { str.append("<OPTION VALUE=\""+((Double)cs.elementAt(i,1)).doubleValue()+"\""); if(((Double)cs.elementAt(i,1)).doubleValue()==CMath.s_double(old)) str.append(" SELECTED"); str.append(">"+((String)cs.elementAt(i,2))); } break; } case 81: // isrecipe if(I instanceof Recipe) return "true"; return "false"; case 82: // recipeskill { Ability A=null; if((firstTime)&&(I instanceof Recipe)) old=""+((Recipe)I).getCommonSkillID(); for(Enumeration e=CMClass.abilities();e.hasMoreElements();) { A=(Ability)e.nextElement(); if(((A.classificationCode()&Ability.ALL_ACODES)==Ability.ACODE_COMMON_SKILL) &&((A.classificationCode()&Ability.ALL_DOMAINS)==Ability.DOMAIN_CRAFTINGSKILL)) { str.append("<OPTION VALUE=\""+A.ID()+"\""); if(A.ID().equalsIgnoreCase(old)) str.append(" SELECTED"); str.append(">"+A.name()); } } break; } case 83: // recipedata if((firstTime)&&(I instanceof Recipe)) old=CMStrings.replaceAll(((Recipe)I).getRecipeCodeLine(),"\t",","); str.append(old); break; case 84: // layer if((firstTime)&&(I instanceof Armor)) old=""+((Armor)I).getClothingLayer(); str.append(old); break; case 85: // see-thru if((firstTime)&&(I instanceof Armor)) old=CMath.bset(((Armor)I).getLayerAttributes(),Armor.LAYERMASK_SEETHROUGH)?"checked":""; else if(old.equals("on")) old="checked"; str.append(old); break; case 86: // multi-layer if((firstTime)&&(I instanceof Armor)) old=CMath.bset(((Armor)I).getLayerAttributes(),Armor.LAYERMASK_MULTIWEAR)?"checked":""; else if(old.equals("on")) old="checked"; str.append(old); break; } if(firstTime) httpReq.addRequestParameters(okparms[o],old.equals("checked")?"on":old); } str.append(ExitData.dispositions(I,firstTime,httpReq,parms)); str.append(AreaData.affectsNBehaves(I,httpReq,parms,1)); String strstr=str.toString(); if(strstr.endsWith(", ")) strstr=strstr.substring(0,strstr.length()-2); return clearWebMacros(strstr); } return ""; } }