Перейти к содержанию
Авторизация  
DieOrDie

Тп

Рекомендуемые сообщения

Как сделать чтобы когда рб уходили далеко от точки респауна его телепоритовало назад?

это для того чтобы люди не отводили рб

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот половина 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;
}
}

Изменено пользователем Westernous

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что где менять надо?

 

Вот это нужно тебе

 

if (!isInCombat() && !isMovementDisabled())
{
 if (!isInsideRadius(spawnX, spawnY, spawnZ, Math.max(GameServerProperties.MAX_DRIFT_RANGE, 200), true, false))
 {
   teleToLocation(spawnX, spawnY, spawnZ, false);
 }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...