Вот сам скрипт ткните пальцем где менять я просто пока что нуб в этом деле!!
PHP код:
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.individual;
import gnu.trove.TIntObjectHashMap;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
import javolution.util.FastList;
import ai.group_template.L2AttackableAIScript;
import com.l2jserver.Config;
import com.l2jserver.gameserver.GeoData;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.ai.CtrlIntention;
import com.l2jserver.gameserver.datatables.NpcTable;
import com.l2jserver.gameserver.datatables.SkillTable;
import com.l2jserver.gameserver.datatables.SpawnTable;
import com.l2jserver.gameserver.instancemanager.GrandBossManager;
import com.l2jserver.gameserver.model.L2CharPosition;
import com.l2jserver.gameserver.model.L2Skill;
import com.l2jserver.gameserver.model.L2Spawn;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2GrandBossInstance;
import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.zone.type.L2BossZone;
import com.l2jserver.gameserver.network.serverpackets.Earthquake;
import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
import com.l2jserver.gameserver.network.serverpackets.PlaySound;
import com.l2jserver.gameserver.network.serverpackets.SpecialCamera;
import com.l2jserver.gameserver.templates.StatsSet;
import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
import com.l2jserver.util.Rnd;
/**
*
* This class ... control for sequence of fight against Antharas.
*
* @version $Revision: $ $Date: $
* @author L2J_JP SANDMAN
*/
public class Antharas extends L2AttackableAIScript
{
// config
private static final int FWA_ACTIVITYTIMEOFANTHARAS = 120;
//private static final int FWA_APPTIMEOFANTHARAS = 1800000;
private static final int FWA_INACTIVITYTIME = 900000;
private static final boolean FWA_OLDANTHARAS = false;
private static final boolean FWA_MOVEATRANDOM = true;
private static final boolean FWA_DOSERVEREARTHQUAKE = true;
private static final int FWA_LIMITOFWEAK = 45;
private static final int FWA_LIMITOFNORMAL = 63;
private static final int FWA_MAXMOBS = 10; // this includes Antharas itself
private static final int FWA_INTERVALOFMOBSWEAK = 180000;
private static final int FWA_INTERVALOFMOBSNORMAL = 150000;
private static final int FWA_INTERVALOFMOBSSTRONG = 120000;
private static final int FWA_PERCENTOFBEHEMOTH = 60;
private static final int FWA_SELFDESTRUCTTIME = 15000;
// Location of teleport cube.
private final int _teleportCubeId = 31859;
private final int _teleportCubeLocation[][] = { { 177615, 114941, -7709, 0 } };
protected List<L2Spawn> _teleportCubeSpawn = new FastList<L2Spawn>();
protected List<L2Npc> _teleportCube = new FastList<L2Npc>();
// Spawn data of monsters.
protected TIntObjectHashMap<L2Spawn> _monsterSpawn = new TIntObjectHashMap<L2Spawn>();
// Instance of monsters.
protected List<L2Npc> _monsters = new FastList<L2Npc>();
protected L2GrandBossInstance _antharas = null;
// monstersId
private static final int ANTHARASOLDID = 29019;
private static final int ANTHARASWEAKID = 29066;
private static final int ANTHARASNORMALID = 29067;
private static final int ANTHARASSTRONGID = 29068;
// Tasks.
protected ScheduledFuture<?> _cubeSpawnTask = null;
protected ScheduledFuture<?> _monsterSpawnTask = null;
protected ScheduledFuture<?> _activityCheckTask = null;
protected ScheduledFuture<?> _socialTask = null;
protected ScheduledFuture<?> _mobiliseTask = null;
protected ScheduledFuture<?> _mobsSpawnTask = null;
protected ScheduledFuture<?> _selfDestructionTask = null;
protected ScheduledFuture<?> _moveAtRandomTask = null;
protected ScheduledFuture<?> _movieTask = null;
//Antharas Status Tracking :
private static final byte DORMANT = 0; //Antharas is spawned and no one has entered yet. Entry is unlocked
private static final byte WAITING = 1; //Antharas is spawend and someone has entered, triggering a 30 minute window for additional people to enter
//before he unleashes his attack. Entry is unlocked
private static final byte FIGHTING = 2; //Antharas is engaged in battle, annihilating his foes. Entry is locked
private static final byte DEAD = 3; //Antharas has been killed. Entry is locked
protected static long _LastAction = 0;
protected static L2BossZone _Zone;
public static void main(String[] args)
{
// now call the constructor (starts up the ai)
new Antharas(-1,"antharas","ai");
}
// Boss: Antharas
public Antharas(int id,String name,String descr)
{
super(id,name,descr);
int[] mob = {ANTHARASOLDID,ANTHARASWEAKID,ANTHARASNORMALID,ANTHARASSTRONGID,29069,29070,29071,29072,29073,29074,29075,29076};
this.registerMobs(mob);
init();
}
// Initialize
private void init()
{
// Setting spawn data of monsters.
try
{
_Zone = GrandBossManager.getInstance().getZone(179700,113800,-7709);
L2NpcTemplate template1;
L2Spawn tempSpawn;
// Old Antharas
template1 = NpcTable.getInstance().getTemplate(ANTHARASOLDID);
tempSpawn = new L2Spawn(template1);
tempSpawn.setLocx(181323);
tempSpawn.setLocy(114850);
tempSpawn.setLocz(-7623);
tempSpawn.setHeading(32542);
tempSpawn.setAmount(1);
tempSpawn.setRespawnDelay(FWA_ACTIVITYTIMEOFANTHARAS * 2);
SpawnTable.getInstance().addNewSpawn(tempSpawn, false);
_monsterSpawn.put(29019, tempSpawn);
// Weak Antharas
template1 = NpcTable.getInstance().getTemplate(ANTHARASWEAKID);
tempSpawn = new L2Spawn(template1);
tempSpawn.setLocx(181323);
tempSpawn.setLocy(114850);
tempSpawn.setLocz(-7623);
tempSpawn.setHeading(32542);
tempSpawn.setAmount(1);
tempSpawn.setRespawnDelay(FWA_ACTIVITYTIMEOFANTHARAS * 2);
SpawnTable.getInstance().addNewSpawn(tempSpawn, false);
_monsterSpawn.put(29066, tempSpawn);
// Normal Antharas
template1 = NpcTable.getInstance().getTemplate(ANTHARASNORMALID);
tempSpawn = new L2Spawn(template1);
tempSpawn.setLocx(181323);
tempSpawn.setLocy(114850);
tempSpawn.setLocz(-7623);
tempSpawn.setHeading(32542);
tempSpawn.setAmount(1);
tempSpawn.setRespawnDelay(FWA_ACTIVITYTIMEOFANTHARAS * 2);
SpawnTable.getInstance().addNewSpawn(tempSpawn, false);
_monsterSpawn.put(29067, tempSpawn);
// Strong Antharas
template1 = NpcTable.getInstance().getTemplate(ANTHARASSTRONGID);
tempSpawn = new L2Spawn(template1);
tempSpawn.setLocx(181323);
tempSpawn.setLocy(114850);
tempSpawn.setLocz(-7623);
tempSpawn.setHeading(32542);
tempSpawn.setAmount(1);
tempSpawn.setRespawnDelay(FWA_ACTIVITYTIMEOFANTHARAS * 2);
SpawnTable.getInstance().addNewSpawn(tempSpawn, false);
_monsterSpawn.put(29068, tempSpawn);
}
catch (Exception e)
{
_log.warning(e.getMessage());
}
// Setting spawn data of teleport cube.
try
{
L2NpcTemplate Cube = NpcTable.getInstance().getTemplate(_teleportCubeId);
L2Spawn spawnDat;
for (int[] element : _teleportCubeLocation)
{
spawnDat = new L2Spawn(Cube);
spawnDat.setAmount(1);
spawnDat.setLocx(element[0]);
spawnDat.setLocy(element[1]);
spawnDat.setLocz(element[2]);
spawnDat.setHeading(element[3]);
spawnDat.setRespawnDelay(60);
spawnDat.setLocation(0);
SpawnTable.getInstance().addNewSpawn(spawnDat, false);
_teleportCubeSpawn.add(spawnDat);
}
}
catch (Exception e)
{
_log.warning(e.getMessage());
}
int status = GrandBossManager.getInstance().getBossStatus(ANTHARASOLDID);
if (FWA_OLDANTHARAS || status == WAITING)
{
StatsSet info = GrandBossManager.getInstance().getStatsSet(ANTHARASOLDID);
Long respawnTime = info.getLong("respawn_time");
if (status == DEAD && respawnTime <= System.currentTimeMillis())
{
// the time has already expired while the server was offline. Immediately spawn antharas in his cave.
// also, the status needs to be changed to DORMANT
GrandBossManager.getInstance().setBossStatus(ANTHARASOLDID,DORMANT);
status = DORMANT;
}
else if (status == FIGHTING)
{
int loc_x = info.getInteger("loc_x");
int loc_y = info.getInteger("loc_y");
int loc_z = info.getInteger("loc_z");
int heading = info.getInteger("heading");
int hp = info.getInteger("currentHP");
int mp = info.getInteger("currentMP");
_antharas = (L2GrandBossInstance) addSpawn(ANTHARASOLDID,loc_x,loc_y,loc_z,heading,false,0);
GrandBossManager.getInstance().addBoss(_antharas);
_antharas.setCurrentHpMp(hp,mp);
_LastAction = System.currentTimeMillis();
// Start repeating timer to check for inactivity
_activityCheckTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new CheckActivity(), 60000, 60000);
}
else if (status == DEAD)
{
ThreadPoolManager.getInstance().scheduleGeneral(new UnlockAntharas(ANTHARASOLDID), respawnTime - System.currentTimeMillis());
}
else
{
setAntharasSpawnTask();
}
}
else
{
int statusWeak = GrandBossManager.getInstance().getBossStatus(ANTHARASWEAKID);
int statusNormal = GrandBossManager.getInstance().getBossStatus(ANTHARASNORMALID);
int statusStrong = GrandBossManager.getInstance().getBossStatus(ANTHARASSTRONGID);
int antharasId = 0;
if (statusWeak == FIGHTING || statusWeak == DEAD)
{
antharasId = ANTHARASWEAKID;
status = statusWeak;
}
else if (statusNormal == FIGHTING || statusNormal == DEAD)
{
antharasId = ANTHARASNORMALID;
status = statusNormal;
}
else if (statusStrong == FIGHTING || statusStrong == DEAD)
{
antharasId = ANTHARASSTRONGID;
status = statusStrong;
}
if (antharasId != 0 && status == FIGHTING)
{
StatsSet info = GrandBossManager.getInstance().getStatsSet(antharasId);
int loc_x = info.getInteger("loc_x");
int loc_y = info.getInteger("loc_y");
int loc_z = info.getInteger("loc_z");
int heading = info.getInteger("heading");
int hp = info.getInteger("currentHP");
int mp = info.getInteger("currentMP");
_antharas = (L2GrandBossInstance) addSpawn(antharasId,loc_x,loc_y,loc_z,heading,false,0);
GrandBossManager.getInstance().addBoss(_antharas);
_antharas.setCurrentHpMp(hp,mp);
_LastAction = System.currentTimeMillis();
// Start repeating timer to check for inactivity
_activityCheckTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new CheckActivity(), 60000, 60000);
}
else if (antharasId != 0 && status == DEAD)
{
StatsSet info = GrandBossManager.getInstance().getStatsSet(antharasId);
Long respawnTime = info.getLong("respawn_time");
if (respawnTime <= System.currentTimeMillis())
{
// the time has already expired while the server was offline. Immediately spawn antharas in his cave.
// also, the status needs to be changed to DORMANT
GrandBossManager.getInstance().setBossStatus(antharasId,DORMANT);
status = DORMANT;
}
else
{
ThreadPoolManager.getInstance().scheduleGeneral(new UnlockAntharas(antharasId), respawnTime - System.currentTimeMillis());
}
}
}
}
// Do spawn teleport cube.
public void spawnCube()
{
if (_mobsSpawnTask != null)
{
_mobsSpawnTask.cancel(true);
_mobsSpawnTask = null;
}
if (_selfDestructionTask != null)
{
_selfDestructionTask.cancel(true);
_selfDestructionTask = null;
}
if (_activityCheckTask != null)
{
_activityCheckTask.cancel(false);
_activityCheckTask = null;
}
for (L2Spawn spawnDat : _teleportCubeSpawn)
{
_teleportCube.add(spawnDat.doSpawn());
}
}
// Setting Antharas spawn task.
public void setAntharasSpawnTask()
{
if (_monsterSpawnTask == null)
{
synchronized(this)
{
if (_monsterSpawnTask == null)
{
GrandBossManager.getInstance().setBossStatus(ANTHARASOLDID,WAITING);
_monsterSpawnTask = ThreadPoolManager.getInstance().scheduleGeneral(new AntharasSpawn(1),Config.Antharas_Wait_Time);
}
}
}
}
private void startMinionSpawns(int antharasId)
{
int intervalOfMobs;
// Interval of minions is decided by the type of Antharas
// that invaded the lair.
switch (antharasId)
{
case ANTHARASWEAKID:
intervalOfMobs = FWA_INTERVALOFMOBSWEAK;
break;
case ANTHARASNORMALID:
intervalOfMobs = FWA_INTERVALOFMOBSNORMAL;
break;
default:
intervalOfMobs = FWA_INTERVALOFMOBSSTRONG;
break;
}
// Spawn mobs.
_mobsSpawnTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new MobsSpawn(), intervalOfMobs, intervalOfMobs);
}
// Do spawn Antharas.
private class AntharasSpawn implements Runnable
{
private int _taskId = 0;
private Collection<L2Character> _players = _Zone.getCharactersInside().values();
AntharasSpawn(int taskId)
{
_taskId = taskId;
}
public void run()
{
int npcId;
L2Spawn antharasSpawn = null;
switch (_taskId)
{
case 1: // Spawn.
// Strength of Antharas is decided by the number of players that
// invaded the lair.
_monsterSpawnTask.cancel(false);
_monsterSpawnTask = null;
if (FWA_OLDANTHARAS)
npcId = 29019; // old
else if (_players.size() <= FWA_LIMITOFWEAK)
npcId = 29066; // weak
else if (_players.size() > FWA_LIMITOFNORMAL)
npcId = 29068; // strong
else
npcId = 29067; // normal
// Do spawn.
antharasSpawn = _monsterSpawn.get(npcId);
_antharas = (L2GrandBossInstance) antharasSpawn.doSpawn();
GrandBossManager.getInstance().addBoss(_antharas);
_monsters.add(_antharas);
_antharas.setIsImmobilized(true);
GrandBossManager.getInstance().setBossStatus(ANTHARASOLDID,DORMANT);
GrandBossManager.getInstance().setBossStatus(npcId,FIGHTING);
_LastAction = System.currentTimeMillis();
// Start repeating timer to check for inactivity
_activityCheckTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new CheckActivity(), 60000, 60000);
// Setting 1st time of minions spawn task.
if (!FWA_OLDANTHARAS)
{
startMinionSpawns(npcId);
}
// Set next task.