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.core.collections.*; 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 com.planet_ink.coffee_mud.WebMacros.AreaScriptNext.AreaScriptInstance; import com.planet_ink.coffee_web.interfaces.*; import java.util.*; /* Copyright 2002-2019 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 AbilityData extends StdWebMacro { @Override public String name() { return "AbilityData"; } // valid parms include help, ranges, quality, target, alignment, domain, // qualifyQ, auto @Override public String runMacro(final HTTPRequest httpReq, final String parm, final HTTPResponse httpResp) { final java.util.Map<String,String> parms=parseParms(parm); final MOB mob=Authenticate.getAuthenticatedMob(httpReq); final String replaceCommand=httpReq.getUrlParameter("REPLACE"); if((replaceCommand != null) && (replaceCommand.length()>0) && (replaceCommand.indexOf('=')>0)) { final int eq=replaceCommand.indexOf('='); final String field=replaceCommand.substring(0,eq); final String value=replaceCommand.substring(eq+1); httpReq.addFakeUrlParameter(field, value); httpReq.addFakeUrlParameter("REPLACE",""); } String last=httpReq.getUrlParameter("ABILITY"); if(last==null) return " @break@"; Ability A=null; final String newAbilityID=httpReq.getUrlParameter("NEWABILITY"); final String newLanguageID=httpReq.getUrlParameter("NEWLANGUAGE"); final String newCraftSkillID=httpReq.getUrlParameter("NEWCRAFTSKILL"); A=(Ability)httpReq.getRequestObjects().get("ABILITY-"+last); if((A==null) &&(newAbilityID!=null) &&(newAbilityID.length()>0) &&(CMClass.getAbility(newAbilityID)==null)) { A=(Ability)CMClass.getAbility("GenAbility").copyOf(); A.setStat("CLASS9",newAbilityID); last=newAbilityID; httpReq.addFakeUrlParameter("ABILITY",newAbilityID); } if((A==null) &&(newLanguageID!=null) &&(newLanguageID.length()>0) &&(CMClass.getAbility(newLanguageID)==null)) { A=(Ability)CMClass.getAbility("GenLanguage").copyOf(); A.setStat("CLASS9",newLanguageID); last=newLanguageID; httpReq.addFakeUrlParameter("ABILITY",newLanguageID); } if((A==null) &&(newCraftSkillID!=null) &&(newCraftSkillID.length()>0) &&(CMClass.getAbility(newCraftSkillID)==null)) { A=(Ability)CMClass.getAbility("GenCraftSkill").copyOf(); A.setStat("CLASS9",newCraftSkillID); last=newCraftSkillID; httpReq.addFakeUrlParameter("ABILITY",newCraftSkillID); } if(last.length()>0) { if(A==null) A=CMClass.getAbility(last); if(parms.containsKey("ISNEWABILITY")) return ""+(CMClass.getAbility(last)==null); if(A!=null) { final StringBuffer str=new StringBuffer(""); if(parms.containsKey("ISGENERIC")) { final Ability A2=CMClass.getAbility(A.ID()); return ""+((A2!=null)&&(A2.isGeneric())); } if(parms.containsKey("ISLANGUAGE")) { return Boolean.toString(A instanceof Language); } if(parms.containsKey("ISCRAFTSKILL")) { return Boolean.toString(A instanceof ItemCraftor); } if(parms.containsKey("NAME")) { String old=httpReq.getUrlParameter("NAME"); if(old==null) old=A.name(); str.append(old+", "); } if(parms.containsKey("GENHELP")) { String old=httpReq.getUrlParameter("GENHELP"); if(old==null) old=A.getStat("HELP"); str.append(old+", "); } if(parms.containsKey("CHARCLASSLEVEL")) { final String old=httpReq.getUrlParameter("CLASS"); if(old != null) { str.append(CMLib.ableMapper().getQualifyingLevel(old, true, A.ID())).append(", "); } } if(parms.containsKey("CHARCLASSNEXT")) { if(parms.containsKey("RESET")) { httpReq.removeUrlParameter("CLASS"); return ""; } String lastID=""; final String clast = httpReq.getUrlParameter("CLASS"); final boolean showAll=parms.containsKey("ALL"); final boolean includeSkillOnly=parms.containsKey("INCLUDESKILLONLY"); for(final Enumeration<CharClass> c=CMClass.charClasses();c.hasMoreElements();) { final CharClass C=c.nextElement(); if(((CMProps.isTheme(C.availabilityCode()))||showAll) &&((!CMath.bset(C.availabilityCode(), Area.THEME_SKILLONLYMASK))||includeSkillOnly||showAll) &&(CMLib.ableMapper().getQualifyingLevel(C.ID(), true, A.ID())>=0)) { if((clast==null)||((clast.length()>0)&&(clast.equals(lastID))&&(!C.ID().equals(lastID)))) { httpReq.addFakeUrlParameter("CLASS",C.ID()); return ""; } lastID=C.ID(); } } httpReq.addFakeUrlParameter("CLASS",""); if(parms.containsKey("EMPTYOK")) return "<!--EMPTY-->"; return " @break@"; } if(A instanceof Language) { if(parms.containsKey("WORDLISTS")) { List<String[]> wordLists=((Language)A).translationLists(A.ID()); if(httpReq.isUrlParameter("WORDLIST1")) { wordLists=new ArrayList<String[]>(); int x=1; while(httpReq.isUrlParameter("WORDLIST"+x)) { wordLists.add(CMParms.parseCommas(httpReq.getUrlParameter("WORDLIST"+x), true).toArray(new String[0])); x++; } } else { for(int i=wordLists.size()-1;i>=0;i--) httpReq.addFakeUrlParameter("WORDLIST"+(i+1), CMParms.toListString(wordLists.get(i))); httpReq.removeUrlParameter("WORDLIST"+(wordLists.size()+1)); } for(int i=wordLists.size()-1;i>=0;i--) { if(wordLists.get(i).length==0) wordLists.remove(i); else break; } if(parms.containsKey("RESET")) { httpReq.removeUrlParameter("WORDLISTNUM"); httpReq.removeUrlParameter("WORDLISTNEXT"); return ""; } else if(parms.containsKey("NEXT")) { String lastID=""; final String lastNum = httpReq.getUrlParameter("WORDLISTNUM"); String nextName = "WORDLIST1"; for(int i=0;i<wordLists.size();i++) { final String thisName="WORDLIST"+Integer.toString(i+1); nextName="WORDLIST"+Integer.toString(i+2); if((lastNum==null)||((lastNum.length()>0)&&(lastNum.equals(lastID))&&(!thisName.equals(lastID)))) { httpReq.addFakeUrlParameter("WORDLISTNUM",thisName); last=thisName; return ""; } lastID=thisName; } httpReq.addFakeUrlParameter("WORDLISTNUM",""); httpReq.addFakeUrlParameter("WORDLISTNEXT",nextName); if(parms.containsKey("EMPTYOK")) return "<!--EMPTY-->"; return " @break@"; } } if(parms.containsKey("HASHWORDS")) { Map<String,String> hashWords=((Language)A).translationHash(A.ID()); if(httpReq.isUrlParameter("HASHWORD1")) { hashWords=new Hashtable<String,String>(); int x=1; while(httpReq.isUrlParameter("HASHWORD"+x)) { final String word=httpReq.getUrlParameter("HASHWORD"+x).toUpperCase().trim(); final String def=httpReq.getUrlParameter("HASHWORDDEF"+x); if((def!=null)&&(def.length()>0)&&(word.length()>0)) hashWords.put(word,def); x++; } } else { int x=1; for(final String key : hashWords.keySet()) { httpReq.addFakeUrlParameter("HASHWORD"+x, key); httpReq.addFakeUrlParameter("HASHWORDDEF"+x, hashWords.get(key)); x++; } httpReq.removeUrlParameter("HASHWORD"+x); httpReq.removeUrlParameter("HASHWORDDEF"+x); } if(parms.containsKey("RESET")) { httpReq.removeUrlParameter("HASHWORDNUM"); httpReq.removeUrlParameter("HASHWORDDEFNUM"); httpReq.removeUrlParameter("HASHWORDNEXT"); httpReq.removeUrlParameter("HASHWORDDEFNEXT"); return ""; } else if(parms.containsKey("NEXT")) { String lastID=""; final String lastNum = httpReq.getUrlParameter("HASHWORDNUM"); String nextName = "HASHWORD1"; String nextDefName = "HASHWORDDEF1"; for(int i=1;i<=hashWords.keySet().size();i++) { final String thisName="HASHWORD"+Integer.toString(i); final String thisDefName="HASHWORDDEF"+Integer.toString(i); nextName="HASHWORD"+Integer.toString(i+1); nextDefName="HASHWORDDEF"+Integer.toString(i+1); if((lastNum==null)||((lastNum.length()>0)&&(lastNum.equals(lastID))&&(!thisName.equals(lastID)))) { httpReq.addFakeUrlParameter("HASHWORDNUM",thisName); httpReq.addFakeUrlParameter("HASHWORDDEFNUM",thisDefName); last=thisName; return ""; } lastID=thisName; i++; } httpReq.addFakeUrlParameter("HASHWORDNUM",""); httpReq.addFakeUrlParameter("HASHWORDDEFNUM",""); httpReq.addFakeUrlParameter("HASHWORDNEXT",nextName); httpReq.addFakeUrlParameter("HASHWORDDEFNEXT",nextDefName); if(parms.containsKey("EMPTYOK")) return "<!--EMPTY-->"; return " @break@"; } } } // here starts CLASSIFICATION if(parms.containsKey("CLASSIFICATION_ACODE")) { String old=httpReq.getUrlParameter("CLASSIFICATION_ACODE"); if(old==null) old=""+(A.classificationCode()&Ability.ALL_ACODES); for(int i=0;i<Ability.ACODE_DESCS.length;i++) { if(A instanceof ItemCraftor) { if(i==Ability.ACODE_COMMON_SKILL) str.append("<OPTION VALUE=\""+i+"\""+((CMath.s_int(old)==i)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(Ability.ACODE_DESCS[i])); } else if(A instanceof Language) { if(i==Ability.ACODE_LANGUAGE) str.append("<OPTION VALUE=\""+i+"\""+((CMath.s_int(old)==i)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(Ability.ACODE_DESCS[i])); } else str.append("<OPTION VALUE=\""+i+"\""+((CMath.s_int(old)==i)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(Ability.ACODE_DESCS[i])); } str.append(", "); } if(parms.containsKey("CLASSIFICATION_DOMAIN")) { String old=httpReq.getUrlParameter("CLASSIFICATION_DOMAIN"); if(old==null) old=""+((A.classificationCode()&Ability.ALL_DOMAINS)>>5); for(int i=0;i<Ability.DOMAIN_DESCS.length;i++) str.append("<OPTION VALUE=\""+i+"\""+((CMath.s_int(old)==i)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(Ability.DOMAIN_DESCS[i])); str.append(", "); } // here ends CLASSIFICATION if(parms.containsKey("TRIGSTR")) { String old=httpReq.getUrlParameter("TRIGSTR"); if(old==null) old=CMParms.toListString(A.triggerStrings()); // remember to sort by longest->shortest on put-back str.append(old.toUpperCase().trim()+", "); } if(parms.containsKey("MINRANGE")) { String old=httpReq.getUrlParameter("MINRANGE"); if(old==null) old=""+A.minRange(); for(int i=0;i<Ability.RANGE_CHOICES.length;i++) str.append("<OPTION VALUE=\""+i+"\""+((CMath.s_int(old)==i)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(Ability.RANGE_CHOICES[i])); str.append(", "); } if(parms.containsKey("MAXRANGE")) { String old=httpReq.getUrlParameter("MAXRANGE"); if(old==null) old=""+A.maxRange(); for(int i=0;i<Ability.RANGE_CHOICES.length;i++) str.append("<OPTION VALUE=\""+i+"\""+((CMath.s_int(old)==i)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(Ability.RANGE_CHOICES[i])); str.append(", "); } if(parms.containsKey("TICKSBETWEENCASTS")) { String old=httpReq.getUrlParameter("TICKSBETWEENCASTS"); if(old==null) old=""+A.getStat("TICKSBETWEENCASTS"); str.append(old+", "); } if(parms.containsKey("TICKSOVERRIDE")) { String old=httpReq.getUrlParameter("TICKSOVERRIDE"); if(old==null) old=""+A.getStat("TICKSOVERRIDE"); str.append(old+", "); } if(parms.containsKey("DISPLAY")) // affected string { String old=httpReq.getUrlParameter("DISPLAY"); if(old==null) old=A.displayText(); str.append(old+", "); } if(parms.containsKey("AUTOINVOKE")) { String old=httpReq.getUrlParameter("AUTOINVOKE"); if(old==null) old=A.getStat("AUTOINVOKE"); else old=""+old.equalsIgnoreCase("on"); str.append(CMath.s_bool(old)?"CHECKED":""); str.append(", "); } if(parms.containsKey("TICKAFFECTS")) { String old=httpReq.getUrlParameter("TICKAFFECTS"); if(old==null) old=A.getStat("TICKAFFECTS"); else old=""+old.equalsIgnoreCase("on"); str.append(CMath.s_bool(old)?"CHECKED":""); str.append(", "); } if(parms.containsKey("ABILITY_FLAGS")) { List<String> list=new ArrayList<String>(); if(httpReq.isUrlParameter("ABILITY_FLAGS")) { String id=""; int num=0; for(;httpReq.isUrlParameter("ABILITY_FLAGS"+id);id=""+(++num)) list.add(httpReq.getUrlParameter("ABILITY_FLAGS"+id)); } else list=CMParms.parseCommas(A.getStat("FLAGS"),true); for (final String element : Ability.FLAG_DESCS) str.append("<OPTION VALUE=\""+element+"\""+(list.contains(element)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(element)); str.append(", "); } if(parms.containsKey("CUSTOMOVERRIDEMANA")) { String old=httpReq.getUrlParameter("OVERRIDEMANA"); if(old==null) old=""+A.getStat("OVERRIDEMANA"); final int x=CMath.s_int(old); if((x>0) && (x<Ability.COST_PCT)) str.append(old+", "); } if(parms.containsKey("OVERRIDEMANA")) { String old=httpReq.getUrlParameter("OVERRIDEMANA"); if(old==null) old=""+A.getStat("OVERRIDEMANA"); final int o=CMath.s_int(old); str.append("<OPTION VALUE=\"-1\""+((o==-1)?" SELECTED":"")+">Use Default"); str.append("<OPTION VALUE=\"0\""+((o==0)?" SELECTED":"")+">None (free skill)"); str.append("<OPTION VALUE=\"\""+(((o>0)&&(o<Ability.COST_PCT))?" SELECTED":"")+"\">Custom Value"); str.append("<OPTION VALUE=\""+Ability.COST_ALL+"\""+((o==Ability.COST_ALL)?" SELECTED":"")+">All Mana"); for(int v=Ability.COST_ALL-5;v>=Ability.COST_ALL-95;v-=5) { str.append("<OPTION VALUE=\""+v+"\""+(((o>(v-5))&&(o<=v))?" SELECTED":"")+">"+(Ability.COST_ALL-v)+"%"); } str.append(", "); } if(parms.containsKey("USAGEMASK")) { List<String> list=new ArrayList<String>(); if(httpReq.isUrlParameter("USAGEMASK")) { String id=""; int num=0; for(;httpReq.isUrlParameter("USAGEMASK"+id);id=""+(++num)) list.add(httpReq.getUrlParameter("USAGEMASK"+id)); } else list=CMParms.parseCommas(A.getStat("USAGEMASK"),true); for (final String element : Ability.USAGE_DESCS) str.append("<OPTION VALUE=\""+element+"\""+(list.contains(element)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(element)); str.append(", "); } if(parms.containsKey("CANAFFECTMASK")) { List<String> list=new ArrayList<String>(); if(httpReq.isUrlParameter("CANAFFECTMASK")) { String id=""; int num=0; for(;httpReq.isUrlParameter("CANAFFECTMASK"+id);id=""+(++num)) list.add(httpReq.getUrlParameter("CANAFFECTMASK"+id)); } else list=CMParms.parseCommas(A.getStat("CANAFFECTMASK"),true); for (final String element : Ability.CAN_DESCS) str.append("<OPTION VALUE=\""+element+"\""+(list.contains(element)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(element)); str.append(", "); } if(parms.containsKey("CANTARGETMASK")) { List<String> list=new ArrayList<String>(); if(httpReq.isUrlParameter("CANTARGETMASK")) { String id=""; int num=0; for(;httpReq.isUrlParameter("CANTARGETMASK"+id);id=""+(++num)) list.add(httpReq.getUrlParameter("CANTARGETMASK"+id)); } else list=CMParms.parseCommas(A.getStat("CANTARGETMASK"),true); for (final String element : Ability.CAN_DESCS) str.append("<OPTION VALUE=\""+element+"\""+(list.contains(element)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(element)); str.append(", "); } if(parms.containsKey("VQUALITY")) //QUALITY { String old=httpReq.getUrlParameter("VQUALITY"); if(old==null) old=""+A.abstractQuality(); for(int i=0;i<Ability.QUALITY_DESCS.length;i++) str.append("<OPTION VALUE=\""+i+"\""+((CMath.s_int(old)==i)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(Ability.QUALITY_DESCS[i])); str.append(", "); } if(parms.containsKey("HERESTATS")) // affect adj: Prop_HereAdjuster { String old=httpReq.getUrlParameter("HERESTATS"); if(old==null) old=A.getStat("HERESTATS"); str.append(old+", "); } if(parms.containsKey("SCRIPT")) { String old=httpReq.getUrlParameter("SCRIPT"); if(old==null) old=A.getStat("SCRIPT"); str.append(old+", "); } if(parms.containsKey("CASTMASK")) { String old=httpReq.getUrlParameter("CASTMASK"); if(old==null) old=A.getStat("CASTMASK"); str.append(old+", "); } if(parms.containsKey("TARGETMASK")) { String old=httpReq.getUrlParameter("TARGETMASK"); if(old==null) old=A.getStat("TARGETMASK"); str.append(old+", "); } if(parms.containsKey("FIZZLEMSG")) { String old=httpReq.getUrlParameter("FIZZLEMSG"); if(old==null) old=A.getStat("FIZZLEMSG"); str.append(old+", "); } if(parms.containsKey("MOCKABLETEXT")) { String old=httpReq.getUrlParameter("MOCKABLETEXT"); if(old==null) old=A.getStat("MOCKABLETEXT"); str.append(old+", "); } if(parms.containsKey("UNINVOKEMSG")) { String old=httpReq.getUrlParameter("UNINVOKEMSG"); if(old==null) old=A.getStat("UNINVOKEMSG"); str.append(old+", "); } if(parms.containsKey("AUTOCASTMSG")) { String old=httpReq.getUrlParameter("AUTOCASTMSG"); if(old==null) old=A.getStat("AUTOCASTMSG"); str.append(old+", "); } if(parms.containsKey("CASTMSG")) { String old=httpReq.getUrlParameter("CASTMSG"); if(old==null) old=A.getStat("CASTMSG"); str.append(old+", "); } if(parms.containsKey("FILENAME")) { String old=httpReq.getUrlParameter("FILENAME"); if(old==null) old=A.getStat("FILENAME"); str.append(old+", "); } if(parms.containsKey("VERB")) { String old=httpReq.getUrlParameter("VERB"); if(old==null) old=A.getStat("VERB"); str.append(old+", "); } if(parms.containsKey("SOUND")) { String old=httpReq.getUrlParameter("SOUND"); if(old==null) old=A.getStat("SOUND"); str.append(old+", "); } if(parms.containsKey("POSTCASTMSG")) { String old=httpReq.getUrlParameter("POSTCASTMSG"); if(old==null) old=A.getStat("POSTCASTMSG"); str.append(old+", "); } if(parms.containsKey("ATTACKCODE")) { String old=httpReq.getUrlParameter("ATTACKCODE"); if(old==null) old=""+CMParms.indexOf(CMMsg.TYPE_DESCS,A.getStat("ATTACKCODE")); for(int i=0;i<CMMsg.TYPE_DESCS.length;i++) str.append("<OPTION VALUE=\""+i+"\""+((CMath.s_int(old)==i)?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(CMMsg.TYPE_DESCS[i])); str.append(", "); } if(parms.containsKey("CANMEND")) { String old=httpReq.getUrlParameter("CANMEND"); if(old==null) old=A.getStat("CANMEND"); else old=old.equalsIgnoreCase("on")?"true":"false"; str.append(old.equalsIgnoreCase("true")?"checked":""); } if(parms.containsKey("CANREFIT")) { String old=httpReq.getUrlParameter("CANREFIT"); if(old==null) old=A.getStat("CANREFIT"); else old=old.equalsIgnoreCase("on")?"true":"false"; str.append(old.equalsIgnoreCase("true")?"checked":""); } if(parms.containsKey("CANBUNDLE")) { String old=httpReq.getUrlParameter("CANBUNDLE"); if(old==null) old=A.getStat("CANBUNDLE"); else old=old.equalsIgnoreCase("on")?"true":"false"; str.append(old.equalsIgnoreCase("true")?"checked":""); } if(parms.containsKey("CANSIT")) { String old=httpReq.getUrlParameter("CANSIT"); if(old==null) old=A.getStat("CANSIT"); else old=old.equalsIgnoreCase("on")?"true":"false"; str.append(old.equalsIgnoreCase("true")?"checked":""); } if(parms.containsKey("MATLIST")) { List<String> list=new ArrayList<String>(); if(httpReq.isUrlParameter("MATLIST")) { String id=""; int num=0; for(;httpReq.isUrlParameter("MATLIST"+id);id=""+(++num)) list.add(httpReq.getUrlParameter("MATLIST"+id).toUpperCase().trim()); } else list=CMParms.parseCommas(A.getStat("MATLIST"),true); for(final RawMaterial.Material m : RawMaterial.Material.values()) str.append("<OPTION VALUE=\""+m.name()+"\""+(list.contains(m.name())?" SELECTED":"")+">"+m.noun()); for(int i=0;i<RawMaterial.CODES.NAMES().length;i++) str.append("<OPTION VALUE=\""+RawMaterial.CODES.NAMES()[i]+"\""+(list.contains(RawMaterial.CODES.NAMES()[i])?" SELECTED":"")+">"+CMStrings.capitalizeAndLower(RawMaterial.CODES.NAMES()[i])); str.append(", "); } if(parms.containsKey("POSTCASTAFFECT")) { List<String> list=new ArrayList<String>(); if(httpReq.isUrlParameter("POSTCASTAFFECT")) { String id=""; int num=0; for(;httpReq.isUrlParameter("POSTCASTAFFECT"+id);id=""+(++num)) list.add(httpReq.getUrlParameter("POSTCASTAFFECT"+id).toUpperCase()); } else list=CMParms.parseSemicolons(A.getStat("POSTCASTAFFECT").toUpperCase(),true); for(final Enumeration<Ability> e=CMClass.abilities();e.hasMoreElements();) { final Ability A2=e.nextElement(); if(((A2.classificationCode()&Ability.ALL_DOMAINS)==Ability.DOMAIN_ARCHON) &&(!CMSecurity.isASysOp(mob))) continue; final String AID=A2.ID(); final String ANAME=A2.name(); str.append("<OPTION VALUE=\""+AID+"\""+(list.contains(AID.toUpperCase())?" SELECTED":"")+">"+ANAME); } str.append(", "); } if(parms.containsKey("MOCKABILITY")) { String id; if(httpReq.isUrlParameter("MOCKABILITY")) id=httpReq.getUrlParameter("MOCKABILITY").toUpperCase().trim(); else id=A.getStat("MOCKABILITY").toUpperCase().trim(); str.append("<OPTION VALUE=\"\""+(id.equals("")?" SELECTED":"")+">"+L("None")); for(final Enumeration<Ability> e=CMClass.abilities();e.hasMoreElements();) { final Ability A2=e.nextElement(); if(((A2.classificationCode()&Ability.ALL_DOMAINS)==Ability.DOMAIN_ARCHON) &&(!CMSecurity.isASysOp(mob))) continue; final String AID=A2.ID(); //final String ANAME=A2.name(); str.append("<OPTION VALUE=\""+AID+"\""+(id.equals(AID.toUpperCase())?" SELECTED":"")+">"+AID); } str.append(", "); } if(parms.containsKey("POSTCASTABILITY")) { List<String> list=new ArrayList<String>(); if(httpReq.isUrlParameter("POSTCASTABILITY")) { String id=""; int num=0; for(;httpReq.isUrlParameter("POSTCASTABILITY"+id);id=""+(++num)) list.add(httpReq.getUrlParameter("POSTCASTABILITY"+id).toUpperCase()); } else list=CMParms.parseSemicolons(A.getStat("POSTCASTABILITY").toUpperCase(),true); for(final Enumeration<Ability> e=CMClass.abilities();e.hasMoreElements();) { final Ability A2=e.nextElement(); if(((A.classificationCode()&Ability.ALL_DOMAINS)==Ability.DOMAIN_ARCHON)&&(!CMSecurity.isASysOp(mob))) continue; final String AID=A2.ID(); final String ANAME=A2.name(); str.append("<OPTION VALUE=\""+AID+"\""+(list.contains(AID.toUpperCase())?" SELECTED":"")+">"+ANAME); } str.append(", "); } if(parms.containsKey("POSTCASTDAMAGE")) { /* Enter a damage or healing formula. Use +/-*()?. @x1=caster level, @x2=target level. Formula evaluates >0 for damage, <0 for healing. Requires Can Target!" */ String old=httpReq.getUrlParameter("POSTCASTDAMAGE"); if(old==null) old=A.getStat("POSTCASTDAMAGE"); str.append(old+", "); } /*********************************************************************************/ /*********************************************************************************/ // here begins the old display data parms if(parms.containsKey("HELP")) { StringBuilder s=CMLib.help().getHelpText(A.ID(),null,false,parms.containsKey("PLAIN")); if(s==null) s=CMLib.help().getHelpText(A.Name(),null,false,parms.containsKey("PLAIN")); int limit=78; if(parms.containsKey("LIMIT")) limit=CMath.s_int(parms.get("LIMIT")); str.append(helpHelp(s,limit)); } if(parms.containsKey("RANGES")) { final int min=A.minRange(); final int max=A.maxRange(); if(min+max==0) str.append(L("Touch, or not applicable, ")); else { if(min==0) str.append("Touch"); else str.append("Range "+min); if(max>0) str.append(" - Range "+max); str.append(", "); } } if(parms.containsKey("QUALITY")) { switch(A.abstractQuality()) { case Ability.QUALITY_MALICIOUS: str.append("Malicious, "); break; case Ability.QUALITY_BENEFICIAL_OTHERS: case Ability.QUALITY_BENEFICIAL_SELF: str.append(L("Always Beneficial, ")); break; case Ability.QUALITY_OK_OTHERS: case Ability.QUALITY_OK_SELF: str.append(L("Sometimes Beneficial, ")); break; case Ability.QUALITY_INDIFFERENT: str.append(L("Circumstantial, ")); break; } } if(parms.containsKey("AUTO")) { if(A.isAutoInvoked()) str.append("Automatic, "); else str.append(L("Requires invocation, ")); } if(parms.containsKey("TARGET")) { switch(A.abstractQuality()) { case Ability.QUALITY_INDIFFERENT: str.append("Item or Room, "); break; case Ability.QUALITY_MALICIOUS: str.append("Others, "); break; case Ability.QUALITY_BENEFICIAL_OTHERS: case Ability.QUALITY_OK_OTHERS: str.append(L("Caster or others, ")); break; case Ability.QUALITY_BENEFICIAL_SELF: case Ability.QUALITY_OK_SELF: str.append("Caster only, "); break; } } if(parms.containsKey("ALIGNMENT")) { String rangeDesc=null; for(final Enumeration<Faction> e=CMLib.factions().factions();e.hasMoreElements();) { final Faction F=e.nextElement(); rangeDesc=F.usageFactorRangeDescription(A); if(rangeDesc.length()>0) str.append(rangeDesc+", "); } } if(parms.containsKey("ALLOWS")) { Ability A2=null; ExpertiseLibrary.ExpertiseDefinition def=null; for(final Iterator<String> i=CMLib.ableMapper().getAbilityAllowsList(A.ID());i.hasNext();) { final String allowStr=i.next(); def=CMLib.expertises().getDefinition(allowStr); if(def!=null) str.append(def.name()+", "); else { A2=CMClass.getAbility(allowStr); if(A2!=null) str.append(A2.Name()+", "); } } } if(parms.containsKey("TYPE")) str.append(CMLib.flags().getAbilityType(A)).append(", "); if(parms.containsKey("DOMAIN")) { if(parms.containsKey("PLAIN")) str.append(CMLib.flags().getAbilityDomain(A)).append(", "); else { final StringBuffer thang=new StringBuffer(""); if((A.classificationCode()&Ability.ALL_DOMAINS)!=0) { int domain=A.classificationCode()&Ability.ALL_DOMAINS; domain=domain>>5; thang.append(Ability.DOMAIN_DESCS[domain].toLowerCase().replace('_',' ')); } else thang.append(Ability.ACODE_DESCS[A.classificationCode()&Ability.ALL_ACODES].toLowerCase()); if(thang.length()>0) { thang.setCharAt(0,Character.toUpperCase(thang.charAt(0))); final int x=thang.toString().indexOf('/'); if(x>0) thang.setCharAt(x+1,Character.toUpperCase(thang.charAt(x+1))); str.append(thang.toString()+", "); } } } if(parms.containsKey("TYPENDOMAIN")) { final StringBuffer thang=new StringBuffer(""); thang.append(CMStrings.capitalizeAndLower(Ability.ACODE_DESCS[A.classificationCode()&Ability.ALL_ACODES])); if((A.classificationCode()&Ability.ALL_DOMAINS)!=0) { int domain=A.classificationCode()&Ability.ALL_DOMAINS; domain=domain>>5; thang.append(": "+CMStrings.capitalizeAndLower(Ability.DOMAIN_DESCS[domain]).replace('_',' ')); } if(thang.length()>0) { thang.setCharAt(0,Character.toUpperCase(thang.charAt(0))); int x=thang.toString().indexOf('/'); while(x>0) { thang.setCharAt(x+1,Character.toUpperCase(thang.charAt(x+1))); x=thang.toString().indexOf('/',x+1); } str.append(thang.toString()+", "); } } if(parms.containsKey("QLEVEL")) { final String className=httpReq.getUrlParameter("CLASS"); int level=0; if((className!=null)&&(className.length()>0)) level=CMLib.ableMapper().getQualifyingLevel(className,true,A.ID()); else level=CMLib.ableMapper().getQualifyingLevel("Archon",true,A.ID()); str.append(level+", "); } if(parms.containsKey("QUALIFYQ")&&(httpReq.isUrlParameter("CLASS"))) { final String className=httpReq.getUrlParameter("CLASS"); if((className!=null)&&(className.length()>0)) { final boolean defaultGain=CMLib.ableMapper().getDefaultGain(className,true,A.ID()); if(!defaultGain) str.append("(Qualify), "); } } if(parms.containsKey("CLASSONLY")&&(httpReq.isUrlParameter("CLASS"))) { final String className=httpReq.getUrlParameter("CLASS"); if((className!=null)&&(className.length()>0)) { if(CMLib.ableMapper().getQualifyingLevel(className,false,A.ID())>=0) str.append("true"); else str.append("false"); } } String strstr=str.toString(); if(strstr.endsWith(", ")) strstr=strstr.substring(0,strstr.length()-2); return clearWebMacros(strstr); } } return ""; } }