DieOrDie 6 Опубликовано 2 ноября, 2012 Как сделать чтобы когда рб уходили далеко от точки респауна его телепоритовало назад? это для того чтобы люди не отводили рб Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Westernous 85 Опубликовано 2 ноября, 2012 (изменено) Вот половина L2RaidBossInstance с моего сервера. Тут есть то что тебе надо. /* /** * This class manages all RaidBoss. In a group mob, there are one master called RaidBoss and several slaves called Minions. */ public class L2RaidBossInstance extends L2MonsterInstance { private static final int RAIDBOSS_MAINTENANCE_INTERVAL = 30000; // 30 sec private RaidBossSpawnManager.StatusEnum _raidStatus; /** * Constructor of L2RaidBossInstance (use L2Character and L2NpcInstance constructor).<BR> * <BR> * <B><U> Actions</U> :</B><BR> * <BR> * <li>Call the L2Character constructor to set the _template of the L2RaidBossInstance (copy skills from template to object and link _calculators to NPC_STD_CALCULATOR)</li> <li>Set the name of the L2RaidBossInstance</li> <li>Create a RandomAnimation Task that will be launched after the * calculated delay if the server allow it</li><BR> * <BR> * @param objectId Identifier of the object to initialized * @param template L2NpcTemplate to apply to the NPC */ public L2RaidBossInstance(int objectId, L2NpcTemplate template) { super(objectId, template); setIsRaid(true); } @Override public void onSpawn() { setIsNoRndWalk(true); super.onSpawn(); } @Override protected int getMaintenanceInterval() { return RAIDBOSS_MAINTENANCE_INTERVAL; } @Override public boolean doDie(L2Character killer) { if (!super.doDie(killer)) { return false; } final L2PcInstance player = killer.getActingPlayer(); if (player != null) { broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.RAID_WAS_SUCCESSFUL)); broadcastPacket(new PlaySound("systemmsg_e.1209")); if (player.isInParty()) { for (L2PcInstance member : player.getParty().getPartyMembers()) { RaidBossPointsManager.getInstance().addPoints(member, getNpcId(), (getLevel() / 2) + Rnd.get(-5, 5)); if (member.isNoble()) { Hero.getInstance().setRBkilled(member.getObjectId(), getNpcId()); } } } else { RaidBossPointsManager.getInstance().addPoints(player, getNpcId(), (getLevel() / 2) + Rnd.get(-5, 5)); if (player.isNoble()) { Hero.getInstance().setRBkilled(player.getObjectId(), getNpcId()); } } } RaidBossSpawnManager.getInstance().updateStatus(this, true); return true; } /** * Spawn all minions at a regular interval Also if boss is too far from home location at the time of this check, teleport it home */ @Override protected void startMaintenanceTask() { if (getTemplate().getMinionData() != null) { getMinionList().spawnMinions(); } _maintenanceTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable() { @Override public void run() { checkAndReturnToSpawn(); } }, 60000, getMaintenanceInterval() + Rnd.get(5000)); } protected void checkAndReturnToSpawn() { if (isDead() || isMovementDisabled()) { return; } // Gordon does not have permanent spawn if (getNpcId() == 29095) { return; } final L2Spawn spawn = getSpawn(); if (spawn == null) { return; } final int spawnX = spawn.getLocx(); final int spawnY = spawn.getLocy(); final int spawnZ = spawn.getLocz(); if (!isInCombat() && !isMovementDisabled()) { if (!isInsideRadius(spawnX, spawnY, spawnZ, Math.max(GameServerProperties.MAX_DRIFT_RANGE, 200), true, false)) { teleToLocation(spawnX, spawnY, spawnZ, false); } } } public void setRaidStatus(RaidBossSpawnManager.StatusEnum status) { _raidStatus = status; } public RaidBossSpawnManager.StatusEnum getRaidStatus() { return _raidStatus; } } Изменено 2 ноября, 2012 пользователем Westernous Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DieOrDie 6 Опубликовано 2 ноября, 2012 а что где менять надо? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SmokiMo 892 Опубликовано 2 ноября, 2012 а что где менять надо? Вот это нужно тебе if (!isInCombat() && !isMovementDisabled()) { if (!isInsideRadius(spawnX, spawnY, spawnZ, Math.max(GameServerProperties.MAX_DRIFT_RANGE, 200), true, false)) { teleToLocation(spawnX, spawnY, spawnZ, false); } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты