package com.planet_ink.coffee_mud.Behaviors;
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.TrackingLibrary;
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 MOBHunter extends ActiveTicker
{
@Override public String ID(){return "MOBHunter";}
@Override protected int canImproveCode(){return Behavior.CAN_MOBS;}
@Override public long flags(){return Behavior.FLAG_MOBILITY|Behavior.FLAG_POTENTIALLYAGGRESSIVE;}
protected boolean debug=false;
int radius=20;
@Override
public String accountForYourself()
{
if(getParms().length()>0)
return "hunters of "+CMLib.masking().maskDesc(getParms());
else
return "creature hunting";
}
public MOBHunter()
{
super();
minTicks=600; maxTicks=1200; chance=100; radius=15;
tickReset();
}
protected boolean isHunting(MOB mob)
{
final Ability A=mob.fetchEffect("Thief_Assasinate");
if(A!=null)
return true;
return false;
}
@Override
public void setParms(String newParms)
{
super.setParms(newParms);
radius=CMParms.getParmInt(newParms,"radius",radius);
}
protected MOB findPrey(MOB mob)
{
MOB prey=null;
final Vector<Room> rooms=new Vector<Room>();
TrackingLibrary.TrackingFlags flags;
flags = CMLib.tracking().newFlags()
.plus(TrackingLibrary.TrackingFlag.OPENONLY)
.plus(TrackingLibrary.TrackingFlag.AREAONLY)
.plus(TrackingLibrary.TrackingFlag.NOEMPTYGRIDS)
.plus(TrackingLibrary.TrackingFlag.NOAIR)
.plus(TrackingLibrary.TrackingFlag.NOWATER);
CMLib.tracking().getRadiantRooms(mob.location(),rooms,flags,null,radius,null);
for(int r=0;r<rooms.size();r++)
{
final Room R=rooms.elementAt(r);
for(int i=0;i<R.numInhabitants();i++)
{
final MOB M=R.fetchInhabitant(i);
if(CMLib.masking().maskCheck(getParms(),M,false))
{
prey=M;
break;
}
}
}
return prey;
}
@Override
public boolean tick(Tickable ticking, int tickID)
{
super.tick(ticking,tickID);
if((canAct(ticking,tickID))&&(ticking instanceof MOB))
{
final MOB mob=(MOB)ticking;
if(debug)
Log.sysOut("ZAPHUNT", "Tick starting");
if(!isHunting(mob))
{
if(debug)
Log.sysOut("ZAPHUNT", "'"+mob.Name()+"' not hunting.");
final MOB prey=findPrey(mob);
if(prey!=null)
{
if(debug)
Log.sysOut("ZAPHUNT", "'"+mob.Name()+"' found prey: '"+prey.Name()+"'");
final Ability A=CMClass.getAbility("Thief_Assassinate");
A.setProficiency(100);
mob.curState().setMana(mob.maxState().getMana());
mob.curState().setMovement(mob.maxState().getMovement());
A.invoke(mob, new Vector<String>(), prey, false,0);
}
}
}
return true;
}
}