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.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.Locales.interfaces.*;
import com.planet_ink.coffee_mud.MOBS.interfaces.*;
import com.planet_ink.coffee_mud.Races.interfaces.*;
import java.util.*;
public class ScriptableEverymob extends StdBehavior
{
public String ID(){return "ScriptableEverymob";}
protected int canImproveCode(){return Behavior.CAN_ROOMS|Behavior.CAN_AREAS;}
private void giveUpTheScript(Area metroA, MOB M)
{
if((M==null)
||(!M.isMonster())
||(M.getStartRoom()==null)
||(metroA==null)
||(!metroA.inMyMetroArea(M.getStartRoom().getArea()))
||(M.fetchBehavior("Scriptable")!=null))
return;
Scriptable S=new Scriptable();
S.setParms(getParms());
S.setSavable(false);
M.addBehavior(S);
S.setSavable(false);
}
private Area determineArea(Environmental forMe)
{
if(forMe instanceof Room)
return ((Room)forMe).getArea();
else
if(forMe instanceof Area)
return (Area)forMe;
return null;
}
private Enumeration determineRooms(Environmental forMe)
{
if(forMe instanceof Room)
return CMParms.makeVector(forMe).elements();
else
if(forMe instanceof Area)
return ((Area)forMe).getMetroMap();
return null;
}
private void giveEveryoneTheScript(Environmental forMe)
{
Enumeration rooms=determineRooms(forMe);
Area A=determineArea(forMe);
if((A!=null)&&(rooms!=null))
{
Room R=null;
for(;rooms.hasMoreElements();)
{
R=(Room)rooms.nextElement();
for(int m=0;m<R.numInhabitants();m++)
giveUpTheScript(A,R.fetchInhabitant(m));
}
}
}
public void startBehavior(Environmental forMe)
{
giveEveryoneTheScript(forMe);
}
public void executeMsg(Environmental host, CMMsg msg)
{
if((msg.target() instanceof Room)
&&(msg.targetMinor()==CMMsg.TYP_LOOK))
giveUpTheScript(determineArea(host),msg.source());
super.executeMsg(host,msg);
}
}