package com.planet_ink.coffee_mud.Abilities.Spells; 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.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.Libraries.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.*; /** * Title: False Realities Flavored CoffeeMUD * Description: The False Realities Version of CoffeeMUD * Copyright: Copyright (c) 2003 Jeremy Vyska * 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. * Company: http://www.falserealities.com * @author FR - Jeremy Vyska; CM - Bo Zimmerman * @version 1.0.0.0 */ public class Spell_BaseClanEq extends Spell { @Override public String ID() { return "Spell_BaseClanEq"; } private final static String localizedName = CMLib.lang().L("Enchant Clan Equipment Base Model"); @Override public String name() { return localizedName; } @Override protected int canTargetCode(){return CAN_ITEMS;} @Override public int abstractQuality(){ return Ability.QUALITY_INDIFFERENT;} @Override public int classificationCode(){return Ability.ACODE_SPELL|Ability.DOMAIN_ENCHANTMENT;} @Override public long flags(){return super.flags()|Ability.FLAG_CLANMAGIC;} @Override protected int overrideMana(){return Ability.COST_ALL;} protected String type=""; @Override protected boolean disregardsArmorCheck(MOB mob){return true;} @Override public boolean canBeLearnedBy(MOB teacher, MOB student) { if(student!=null) { for(final Enumeration<Ability> a=student.allAbilities();a.hasMoreElements();) { final Ability A=a.nextElement(); if((A!=null)&&(A instanceof Spell_BaseClanEq)) { teacher.tell(L("@x1 already knows '@x2', and may not learn another clan enchantment.",student.name(),A.name())); student.tell(L("You may only learn a single clan enchantment.")); return false; } } } return super.canBeLearnedBy(teacher,student); } @Override public boolean invoke(MOB mob, List<String> commands, Physical givenTarget, boolean auto, int asLevel) { if(type.length()==0) return false; if(!mob.clans().iterator().hasNext()) { mob.tell(L("You aren't even a member of a clan.")); return false; } final Pair<Clan,Integer> clanPair=CMLib.clans().findPrivilegedClan(mob, Clan.Function.ENCHANT); if(clanPair==null) { mob.tell(L("You are not authorized to draw from the power of your clan.")); return false; } final Clan C=clanPair.first; final String ClanName=C.clanID(); final String ClanType=C.getGovernmentName(); // Invoking will be like: // CAST [CLANEQSPELL] ITEM QUANTITY // -2 -1 0 1 if(commands.size()<1) { mob.tell(L("Enchant which spell onto what?")); return false; } if(commands.size()<2) { mob.tell(L("Use how much clan enchantment power?")); return false; } final Physical target=mob.location().fetchFromMOBRoomFavorsItems(mob,null,commands.get(0),Wearable.FILTER_UNWORNONLY); if((target==null)||(!CMLib.flags().canBeSeenBy(target,mob))) { mob.tell(L("You don't see '@x1' here.",(commands.get(0)))); return false; } // Add clan power check start final int points=CMath.s_int(commands.get(1)); if(points<=0) { mob.tell(L("You need to use at least 1 enchantment point.")); return false; } final long exp=points*CMProps.getIntVar(CMProps.Int.CLANENCHCOST); if((C.getExp()<exp)||(exp<0)) { mob.tell(L("You need @x1 to do that, but your @x2 has only @x3 experience points.",""+exp,C.getGovernmentName(),""+C.getExp())); return false; } // Add clan power check end if(target.fetchEffect("Prop_ClanEquipment")!=null) { mob.tell(L("@x1 is already clan enchanted.",target.name(mob))); return false; } // lose all the mana! if(!super.invoke(mob,commands,givenTarget,auto,asLevel)) return false; final boolean success=proficiencyCheck(mob,0,auto); C.setExp(C.getExp()-exp); C.update(); if(success) { final CMMsg msg=CMClass.getMsg(mob,target,this,verbalCastCode(mob,target,auto),L("^S<S-NAME> move(s) <S-HIS-HER> fingers around <T-NAMESELF>, encanting intensely.^?")); if (mob.location().okMessage(mob, msg)) { mob.location().send(mob, msg); final Ability A=CMClass.getAbility("Prop_ClanEquipment"); final StringBuffer str=new StringBuffer(""); str.append(type); // Type of Enchantment str.append(" "); str.append(""+points); // Power of Enchantment str.append(" \""); str.append(ClanName); // Clan Name str.append("\" \""); str.append(ClanType); // Clan Type str.append("\""); A.setMiscText(str.toString()); target.addEffect(A); } } else beneficialWordsFizzle(mob,target,L("<S-NAME> move(s) <S-HIS-HER> fingers around <T-NAMESELF>, encanting intensely, and looking very frustrated.")); return success; } }