» Find Revision
L2J Revision Number:
L2JDP Revision Number:
Hello.
where i can change respawn time for GrandBosses (low time) and reset respawnTime in grandboss_data.
ai.individual or com.l2jserver/config.java?
i have this in Config.java:
Code: Select all
Interval_Of_QueenAnt_Spawn = Integer.parseInt(grandbossSettings.getProperty("IntervalOfQueenAntSpawn", "2")); if (Interval_Of_QueenAnt_Spawn < 1 || Interval_Of_QueenAnt_Spawn > 4) Interval_Of_QueenAnt_Spawn = 2; Interval_Of_QueenAnt_Spawn = Interval_Of_QueenAnt_Spawn * 3600000; Random_Of_QueenAnt_Spawn = Integer.parseInt(grandbossSettings.getProperty("RandomOfQueenAntSpawn", "1")); if (Random_Of_QueenAnt_Spawn < 1 || Random_Of_QueenAnt_Spawn > 2) Random_Of_QueenAnt_Spawn = 1; Random_Of_QueenAnt_Spawn = Random_Of_QueenAnt_Spawn * 3600000;
Code: Select all
//QUEEN Status Tracking : private static final byte ALIVE = 0; //Queen Ant is spawned. private static final byte DEAD = 1; //Queen Ant has been killed. private static L2BossZone _Zone; private static List<L2Attackable> _Minions = new FastList<L2Attackable>(); public QueenAnt(int questId, String name, String descr) { super(questId, name, descr); int[] mobs = { QUEEN, LARVA, NURSE, GUARD, ROYAL }; registerMobs(mobs); _Zone = GrandBossManager.getInstance().getZone(-21610, 181594, -5734); StatsSet info = GrandBossManager.getInstance().getStatsSet(QUEEN); int status = GrandBossManager.getInstance().getBossStatus(QUEEN); if (status == DEAD) { // load the unlock date and time for queen ant from DB long temp = info.getLong("respawn_time") - System.currentTimeMillis(); // if queen ant is locked until a certain time, mark it so and start the unlock timer // the unlock time has not yet expired. if (temp > 0) startQuestTimer("queen_unlock", temp, null, null); else { // the time has already expired while the server was offline. Immediately spawn queen ant. L2GrandBossInstance queen = (L2GrandBossInstance) addSpawn(QUEEN, -21610, 181594, -5734, 0, false, 0); GrandBossManager.getInstance().setBossStatus(QUEEN, ALIVE); spawnBoss(queen); } } else { 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"); L2GrandBossInstance queen = (L2GrandBossInstance) addSpawn(QUEEN, loc_x, loc_y, loc_z, heading, false, 0); queen.setCurrentHpMp(hp, mp); spawnBoss(queen); } } public void spawnBoss(L2GrandBossInstance npc) { GrandBossManager.getInstance().addBoss(npc); if (Rnd.get(100) < 33) _Zone.movePlayersTo(-19480, 187344, -5600); else if (Rnd.get(100) < 50) _Zone.movePlayersTo(-17928, 180912, -5520); else _Zone.movePlayersTo(-23808, 182368, -5600); GrandBossManager.getInstance().addBoss(npc); startQuestTimer("action", 10000, npc, null, true); npc.broadcastPacket(new PlaySound(1, "BS02_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ())); //Spawn minions addSpawn(LARVA, -21600, 179482, -5846, Rnd.get(360), false, 0).setIsRaidMinion(true); addSpawn(NURSE, -22000, 179482, -5846, 0, false, 0).setIsRaidMinion(true); addSpawn(NURSE, -21200, 179482, -5846, 0, false, 0).setIsRaidMinion(true); int radius = 400; for (int i = 0; i < 6; i++) { int x = (int) (radius * Math.cos(i * 1.407)); //1.407~2pi/6 int y = (int) (radius * Math.sin(i * 1.407)); addSpawn(NURSE, npc.getX() + x, npc.getY() + y, npc.getZ(), 0, false, 0).setIsRaidMinion(true); } for (int i = 0; i < 8; i++) { int x = (int) (radius * Math.cos(i * .7854)); //.7854~2pi/8 int y = (int) (radius * Math.sin(i * .7854)); L2Npc mob = addSpawn(ROYAL, npc.getX() + x, npc.getY() + y, npc.getZ(), 0, false, 0); mob.setIsRaidMinion(true); _Minions.add((L2Attackable) mob); } startQuestTimer("check_royal__Zone", 120000, npc, null, true); } public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { if (event.equalsIgnoreCase("action") && npc != null) { if (Rnd.get(3) == 0) { if (Rnd.get(2) == 0) { npc.broadcastPacket(new SocialAction(npc.getObjectId(), 3)); } else { npc.broadcastPacket(new SocialAction(npc.getObjectId(), 4)); } } } else if (event.equalsIgnoreCase("queen_unlock")) { L2GrandBossInstance queen = (L2GrandBossInstance) addSpawn(QUEEN, -21610, 181594, -5734, 0, false, 0); GrandBossManager.getInstance().setBossStatus(QUEEN, ALIVE); spawnBoss(queen); } else if (event.equalsIgnoreCase("check_royal__Zone") && npc != null) { for (int i = 0; i < _Minions.size(); i++) { L2Attackable mob = _Minions.get(i); if (mob != null && !_Zone.isInsideZone(mob)) { mob.teleToLocation(npc.getX(), npc.getY(), npc.getZ()); } } } else if (event.equalsIgnoreCase("despawn_royals")) { for (int i = 0; i < _Minions.size(); i++) { L2Attackable mob = _Minions.get(i); if (mob != null) { mob.decayMe(); } } _Minions.clear(); } else if (event.equalsIgnoreCase("spawn_royal")) { L2Npc mob = addSpawn(ROYAL, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0); mob.setIsRaidMinion(true); _Minions.add((L2Attackable) mob); } else if (event.equalsIgnoreCase("spawn_nurse")) { addSpawn(NURSE, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0).setIsRaidMinion(true); } return super.onAdvEvent(event, npc, player); } public String onFactionCall(L2Npc npc, L2Npc caller, L2PcInstance attacker, boolean isPet) { if (caller == null || npc == null) return super.onFactionCall(npc, caller, attacker, isPet); int npcId = npc.getNpcId(); int callerId = caller.getNpcId(); if (npcId == NURSE) { if (callerId == LARVA) { npc.setTarget(caller); npc.doCast(SkillTable.getInstance().getInfo(4020, 1)); npc.doCast(SkillTable.getInstance().getInfo(4024, 1)); return null; } else if (callerId == QUEEN) { if (npc.getTarget() != null && npc.getTarget() instanceof L2Npc) { if (((L2Npc) npc.getTarget()).getNpcId() == LARVA) { return null; } } npc.setTarget(caller); npc.doCast(SkillTable.getInstance().getInfo(4020, 1)); return null; } } return super.onFactionCall(npc, caller, attacker, isPet); } public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet) { int npcId = npc.getNpcId(); if (npcId == NURSE) { npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null); return null; } return super.onAttack(npc, attacker, damage, isPet); } public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet) { int npcId = npc.getNpcId(); if (npcId == QUEEN) { npc.broadcastPacket(new PlaySound(1, "BS02_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ())); GrandBossManager.getInstance().setBossStatus(QUEEN, DEAD); //time is 36hour +/- 17hour long respawnTime = (long) Config.Interval_Of_QueenAnt_Spawn + Rnd.get(Config.Random_Of_QueenAnt_Spawn); startQuestTimer("queen_unlock", respawnTime, null, null); cancelQuestTimer("action", npc, null); // also save the respawn time so that the info is maintained past reboots StatsSet info = GrandBossManager.getInstance().getStatsSet(QUEEN); info.set("respawn_time", System.currentTimeMillis() + respawnTime); GrandBossManager.getInstance().setStatsSet(QUEEN, info); startQuestTimer("despawn_royals", 20000, null, null); this.cancelQuestTimers("spawn_minion"); } else if (GrandBossManager.getInstance().getBossStatus(QUEEN) == ALIVE) { if (npcId == ROYAL) { _Minions.remove(npc); this.startQuestTimer("spawn_royal", (280 + Rnd.get(40)) * 1000, npc, null); } else if (npcId == NURSE) { startQuestTimer("spawn_nurse", 10000, npc, null); } } return super.onKill(npc, killer, isPet); } public static void main(String[] args) { // now call the constructor (starts up the ai) new QueenAnt(-1, "queen_ant", "ai"); }}
thanks.