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
public boolean disregardsArmorCheck(final MOB mob)
{
return true;
}
@Override
public boolean canBeLearnedBy(final MOB teacher, final 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))
{
if(teacher != null)
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(final MOB mob, final List<String> commands, final Physical givenTarget, final boolean auto, final 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;
}
Pair<Clan,Integer> clanPair=null;
{
final Iterator<Pair<Clan,Integer>> i=mob.clans().iterator();
if(i.hasNext())
{
i.next();
if(i.hasNext() && commands.size()>1)
{
final String clanID = commands.get(commands.size()-1);
final Clan C=CMLib.clans().findClan(clanID);
if(C!=null)
{
clanPair=mob.getClanRole(C.clanID());
if(clanPair == null)
{
mob.tell(L("You aren't a member of '@x1'.",C.clanID()));
return false;
}
if(C.getAuthority(clanPair.second.intValue(), Clan.Function.ENCHANT) == Clan.Authority.CAN_NOT_DO)
{
mob.tell(L("You aren't authorized to enchant for '@x1'.",C.clanID()));
return false;
}
commands.remove(commands.size()-1);
}
}
}
}
if(clanPair == null)
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;
}
if(points > C.getClanLevel())
{
mob.tell(L("Your can not enchant above your clans level, which is @x1.",""+C.getClanLevel()));
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.adjExp(mob,(int)-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;
}
}