case "SPAWN_FAFURION":
{
_fafurion.disableCoreAI(true);
_fafurion.setRandomWalking(false);
_fafurion.teleToLocation(175745, 245178, -14848, 0);
setStatus(IN_FIGHT);
_lastAttack = System.currentTimeMillis();
zone.broadcastPacket(new PlaySound("BS02_A"));
startQuestTimer("CAMERA_1", 23, _fafurion, null);
break;
}
case "CAMERA_1":
{
zone.broadcastPacket(new SpecialCamera(npc, 700, 13, -19, 0, 10000, 20000, 0, 0, 0, 0, 0));
startQuestTimer("CAMERA_2", 3000, npc, null);
break;
}
case "CAMERA_2":
{
zone.broadcastPacket(new SpecialCamera(npc, 700, 13, 0, 6000, 10000, 20000, 0, 0, 0, 0, 0));
startQuestTimer("CAMERA_3", 10000, npc, null);
break;
}
case "CAMERA_3":
{
zone.broadcastPacket(new SpecialCamera(npc, 3700, 0, -3, 0, 10000, 10000, 0, 0, 0, 0, 0));
zone.broadcastPacket(new SocialAction(npc.getObjectId(), 1));
startQuestTimer("CAMERA_4", 200, npc, null);
startQuestTimer("SOCIAL", 5200, npc, null);
break;
}
case "CAMERA_4":
{
zone.broadcastPacket(new SpecialCamera(npc, 1100, 0, -3, 22000, 10000, 30000, 0, 0, 0, 0, 0));
startQuestTimer("CAMERA_5", 10800, npc, null);
break;
}
case "CAMERA_5":
{
zone.broadcastPacket(new SpecialCamera(npc, 1100, 0, -3, 300, 10000, 7000, 0, 0, 0, 0, 0));
startQuestTimer("START_MOVE", 1900, npc, null);
break;
}
case "SOCIAL":
{
zone.broadcastPacket(new SocialAction(npc.getObjectId(), 2));
break;
}
case "START_MOVE":
{
_fafurion.disableCoreAI(false);
_fafurion.setRandomWalking(true);
for (Player players : World.getInstance().getVisibleObjectsInRange(npc, Player.class, 4000))
{
if (players.isHero())
{
zone.broadcastPacket(new ExShowScreenMessage(NpcStringId.S1_YOU_CANNOT_HOPE_TO_DEFEAT_ME_WITH_YOUR_MEAGER_STRENGTH, 2, 4000, players.getName()));
break;
}
}
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(175745, 245178, -14848));
startQuestTimer("CHECK_ATTACK", 60000, npc, null);
startQuestTimer("SPAWN_MINION", 300000, npc, null);
break;
package l2p.gameserver.network.s2c.movie;
import l2p.gameserver.network.components.ServerPackets;
import l2p.gameserver.network.s2c.L2GameServerPacket;
public class SpecialCamera extends L2GameServerPacket
{
private int _objectId, _distance, _yaw, _pitch, _speed, _duration, _relYaw, _relPitch;
private boolean _wide, _relAngle, _skipPath;
public SpecialCamera(int objId, int distance, int yaw, int pitch, int speed, int duration)
{
this(objId, distance, yaw, pitch, speed, duration, 0, 0, false, false, false);
}
public SpecialCamera(int objectId, int distance, int yaw, int pitch, int speed, int duration, int relYaw, int relPitch, boolean wide, boolean relAngle, boolean skipPath)
{
_objectId = objectId;
_distance = distance;
_yaw = yaw;
_pitch = pitch;
_speed = speed;
_duration = duration;
_relYaw = relYaw;
_relPitch = relPitch;
_wide = wide;
_relAngle = relAngle;
_skipPath = skipPath;
}
@Override
protected final void writeImpl()
{
writeId(ServerPackets.SPECIAL_CAMERA);
writeD(_objectId); // objectId объекта, на которого направлена камера
writeD(_distance); // на какой дистанции от объекта остановится камера, возможны отрицательные значения. Если камера приблизится на столько что пройдет насквозь объект, она сделает оборот и будет показывать спину объекта
writeD(_yaw); // с какой стороны смотреть на объект (360/0 = спереди, 180 = сзади, 90 = справа, 270 = слева)
writeD(_pitch); // угол наклона (> 0 - смотреть сверху, < 0 - смотреть снизу)
writeD(_speed); // скорость движения камеры [чем меньше тем быстрее] [игнорируется клиентом?]
writeD(_duration); // сколько занимает времени режим камеры
writeD(_relYaw); // как повернут сам обьектив по горизонтали (360/0 = прямо, 180 = назад, 90 = вправо, 270 = влево)
writeD(_relPitch); // как повернут сам обьектив по вертикали (360/0 = прямо, 180 = верх ногами, 90 = вверх, 270 = вниз)
writeD(_wide); // широкоформатная камера [добавляет киношные черные полосы сверху и низу] (0 = выкл, 1 = вкл)
writeD(_relAngle); // привязывает значения yaw/pitch к направлению взгляда объекта (0 = выкл, 1 = вкл)
writeD(_skipPath); // пропускает кадры приближения к объекту (0 = выкл, 1 = вкл)
}
}
Спасибо.Java:package l2p.gameserver.network.s2c.movie; import l2p.gameserver.network.components.ServerPackets; import l2p.gameserver.network.s2c.L2GameServerPacket; public class SpecialCamera extends L2GameServerPacket { private int _objectId, _distance, _yaw, _pitch, _speed, _duration, _relYaw, _relPitch; private boolean _wide, _relAngle, _skipPath; public SpecialCamera(int objId, int distance, int yaw, int pitch, int speed, int duration) { this(objId, distance, yaw, pitch, speed, duration, 0, 0, false, false, false); } public SpecialCamera(int objectId, int distance, int yaw, int pitch, int speed, int duration, int relYaw, int relPitch, boolean wide, boolean relAngle, boolean skipPath) { _objectId = objectId; _distance = distance; _yaw = yaw; _pitch = pitch; _speed = speed; _duration = duration; _relYaw = relYaw; _relPitch = relPitch; _wide = wide; _relAngle = relAngle; _skipPath = skipPath; } @Override protected final void writeImpl() { writeId(ServerPackets.SPECIAL_CAMERA); writeD(_objectId); // objectId объекта, на которого направлена камера writeD(_distance); // на какой дистанции от объекта остановится камера, возможны отрицательные значения. Если камера приблизится на столько что пройдет насквозь объект, она сделает оборот и будет показывать спину объекта writeD(_yaw); // с какой стороны смотреть на объект (360/0 = спереди, 180 = сзади, 90 = справа, 270 = слева) writeD(_pitch); // угол наклона (> 0 - смотреть сверху, < 0 - смотреть снизу) writeD(_speed); // скорость движения камеры [чем меньше тем быстрее] [игнорируется клиентом?] writeD(_duration); // сколько занимает времени режим камеры writeD(_relYaw); // как повернут сам обьектив по горизонтали (360/0 = прямо, 180 = назад, 90 = вправо, 270 = влево) writeD(_relPitch); // как повернут сам обьектив по вертикали (360/0 = прямо, 180 = верх ногами, 90 = вверх, 270 = вниз) writeD(_wide); // широкоформатная камера [добавляет киношные черные полосы сверху и низу] (0 = выкл, 1 = вкл) writeD(_relAngle); // привязывает значения yaw/pitch к направлению взгляда объекта (0 = выкл, 1 = вкл) writeD(_skipPath); // пропускает кадры приближения к объекту (0 = выкл, 1 = вкл) } }
FAFURION, loc_x, loc_y, loc_z, heading,
насколько помню хеадинг 0 это на восток (вроде у корабля так, в грации сместили на -16384)
круг 32768,
по часовой в +
против -
Ну так это направление куда смотрит объект, босс в данном случае
Заходишь в игру, и получаешь значение, сам посмотрев в нужном направлении и введя гм-команду для вывода heading.
Хз какая в мобиусе может быть, но в овере это //loc
З.Ы. Не помню, но вроде бы в выводе инфы по ///stat l2 это тоже есть.
там кстати эмиттер который по центру логова надо ему поставить эвент ай ди, и включать в какой то момент наверно когда он приземляется
Да, спасибо, уже сделал почти, завтра закончу, теперь хоть дракона показывает а не его ж..пу.
Он тут летать не умееттам кстати эмиттер который по центру логова надо ему поставить эвент ай ди, и включать в какой то момент наверно когда он приземляется
кстати там были ещё двери, если надо могу их поставить, и там же ещё тоже был эмиттер дверей с ай ди
у него анимация как бежит по стенке и выпрыгивает из воды, а когда финал он ныряетОн тут летать не умеет
А как его к скрипту к AI подвязатьу него анимация как бежит по стенке и выпрыгивает из воды, а когда финал он ныряет
наверно этот эмиттер включается в финале всё таки
всё что могу подсказать это названия этих анимацийА как его к скрипту к AI подвязать
Тоже вопрос у меня такой назревал) как привязать, если смотреть скрипт Валакаса то там прописывается просто позиция камеры, не какой привязки к анимация нет.всё что могу подсказать это названия этих анимаций
enter01 - выныривает из воды и запрыгивает на своё место
Trans - стоит и рычит
death - ныряет в бетон обратно
Возможно привязаны к определенным социалкам, т.е. попробовать SocialAction с разными ид социалок поотсылать.
// Do spawn Valakas.
private static class ValakasSpawn implements Runnable
{
private int _distance = 2550;
private int _taskId;
private L2BossInstance _valakas = null;
private GArray<L2Player> _players = getPlayersInside();
ValakasSpawn(int taskId, L2BossInstance valakas)
{
_taskId = taskId;
_valakas = valakas;
}
@Override
public void run()
{
SocialAction sa = null;
if(_socialTask != null)
{
_socialTask.cancel(false);
_socialTask = null;
}
switch(_taskId)
{
case 1:
Dying = false;
// Do spawn.
L2Spawn valakasSpawn = _monsterSpawn.get(Valakas);
_valakas = (L2BossInstance) valakasSpawn.doSpawn(true);
_valakas.addListener(_blistener);
_monsters.add(_valakas);
_valakas.setImmobilized(true);
_state.setRespawnDate(Config.FWV_FIXINTERVALOFVALAKAS, Config.FWV_RANDOMINTERVALOFVALAKAS, Config.VALAKAS_FIXRESP);
_state.setState(EpicBossState.State.ALIVE);
_state.update();
_socialTask = ThreadPoolManager.getInstance().schedule(new ValakasSpawn(2, _valakas), 16);
break;
case 2:
// Do social.
sa = new SocialAction(_valakas.getObjectId(), 1);
_valakas.broadcastPacket(sa);
// Set camera.
for(L2Player pc : _players)
if(pc.getDistance(_valakas) <= _distance)
{
pc.enterMovieMode();
pc.specialCamera(_valakas, 1800, 180, -1, 1500, 15000);
}
else
pc.leaveMovieMode();
_socialTask = ThreadPoolManager.getInstance().schedule(new ValakasSpawn(3, _valakas), 1500);
break;
case 3:
// Set camera.
for(L2Player pc : _players)
if(pc.getDistance(_valakas) <= _distance)
{
pc.enterMovieMode();
pc.specialCamera(_valakas, 1300, 180, -5, 3000, 15000);
}
else
pc.leaveMovieMode();
_socialTask = ThreadPoolManager.getInstance().schedule(new ValakasSpawn(4, _valakas), 3300);
break;
case 4:
// Set camera.
for(L2Player pc : _players)
if(pc.getDistance(_valakas) <= _distance)
{
pc.enterMovieMode();
pc.specialCamera(_valakas, 500, 180, -8, 600, 15000);
}
else
pc.leaveMovieMode();
_socialTask = ThreadPoolManager.getInstance().schedule(new ValakasSpawn(5, _valakas), 1300);
break;
case 5:
// Set camera.
for(L2Player pc : _players)
if(pc.getDistance(_valakas) <= _distance)
{
pc.enterMovieMode();
pc.specialCamera(_valakas, 1200, 180, -5, 300, 15000);
}
else
pc.leaveMovieMode();
_socialTask = ThreadPoolManager.getInstance().schedule(new ValakasSpawn(6, _valakas), 1600);
break;
case 6:
// Set camera.
for(L2Player pc : _players)
if(pc.getDistance(_valakas) <= _distance)
{
pc.enterMovieMode();
pc.specialCamera(_valakas, 2800, 250, 70, 0, 15000);
}
else
pc.leaveMovieMode();
_socialTask = ThreadPoolManager.getInstance().schedule(new ValakasSpawn(7, _valakas), 200);
break;
case 7:
// Set camera.
for(L2Player pc : _players)
if(pc.getDistance(_valakas) <= _distance)
{
pc.enterMovieMode();
pc.specialCamera(_valakas, 2600, 30, 60, 3400, 15000);
}
else
pc.leaveMovieMode();
_socialTask = ThreadPoolManager.getInstance().schedule(new ValakasSpawn(8, _valakas), 5700);
break;
case 8:
// Set camera.
for(L2Player pc : _players)
if(pc.getDistance(_valakas) <= _distance)
{
pc.enterMovieMode();
pc.specialCamera(_valakas, 700, 150, -65, 0, 15000);
}
else
pc.leaveMovieMode();
_socialTask = ThreadPoolManager.getInstance().schedule(new ValakasSpawn(9, _valakas), 1400);
break;
case 9:
// Set camera.
for(L2Player pc : _players)
if(pc.getDistance(_valakas) <= _distance)
{
pc.enterMovieMode();
pc.specialCamera(_valakas, 1200, 150, -55, 2900, 15000);
}
else
pc.leaveMovieMode();
_socialTask = ThreadPoolManager.getInstance().schedule(new ValakasSpawn(10, _valakas), 6700);
break;
case 10:
// Set camera.
for(L2Player pc : _players)
if(pc.getDistance(_valakas) <= _distance)
{
pc.enterMovieMode();
pc.specialCamera(_valakas, 750, 170, -10, 1700, 5700);
}
else
pc.leaveMovieMode();
_socialTask = ThreadPoolManager.getInstance().schedule(new ValakasSpawn(11, _valakas), 3700);
break;
case 11:
// Set camera.
for(L2Player pc : _players)
if(pc.getDistance(_valakas) <= _distance)
{
pc.enterMovieMode();
pc.specialCamera(_valakas, 840, 170, -5, 1200, 2000);
}
else
pc.leaveMovieMode();
_socialTask = ThreadPoolManager.getInstance().schedule(new ValakasSpawn(12, _valakas), 2000);
break;
case 12:
// Reset camera.
for(L2Player pc : _players)
pc.leaveMovieMode();
_mobiliseTask = ThreadPoolManager.getInstance().schedule(new SetMobilised(_valakas), 16);
// Move at random.
if(FWV_MOVEATRANDOM)
{
Location pos = new Location(Rnd.get(211080, 214909), Rnd.get(-115841, -112822), -1662, 0);
_moveAtRandomTask = ThreadPoolManager.getInstance().schedule(new MoveAtRandom(_valakas, pos), 32);
}
setLastAttackTime();
_sleepCheckTask = ThreadPoolManager.getInstance().schedule(new CheckLastAttack(), 600000);
_activityTimeEndTask = ThreadPoolManager.getInstance().schedule(new ActivityTimeEnd(), (long) Config.VALAKAS_ACTIVITY_TIME);
break;
}
}
}
case "SPAWN_FAFURION":
{
_fafurion.disableCoreAI(true);
_fafurion.setRandomWalking(false);
_fafurion.teleToLocation(175745, 245178, -14848, 25000);
setStatus(IN_FIGHT);
_lastAttack = System.currentTimeMillis();
zone.broadcastPacket(new PlaySound("BS02_A"));
startQuestTimer("CAMERA_1", 23, _fafurion, null);
break;
}
case "CAMERA_1":
{
zone.broadcastPacket(new SpecialCamera(npc, 700, 13, -19, 0, 10000, 20000, 0, 0, 0, 0, 0));
startQuestTimer("CAMERA_2", 3000, npc, null);
break;
}
case "CAMERA_2":
{
zone.broadcastPacket(new SpecialCamera(npc, 700, 13, 0, 6000, 10000, 20000, 0, 0, 0, 0, 0));
startQuestTimer("CAMERA_3", 10000, npc, null);
break;
}
case "CAMERA_3":
{
zone.broadcastPacket(new SpecialCamera(npc, 3700, 0, -3, 0, 10000, 10000, 0, 0, 0, 0, 0));
zone.broadcastPacket(new SocialAction(npc.getObjectId(), 1));
startQuestTimer("CAMERA_4", 200, npc, null);
startQuestTimer("SOCIAL", 5200, npc, null);
break;
}
case "CAMERA_4":
{
zone.broadcastPacket(new SpecialCamera(npc, 1100, 0, -3, 22000, 10000, 30000, 0, 0, 0, 0, 0));
startQuestTimer("CAMERA_5", 10800, npc, null);
break;
}
case "CAMERA_5":
{
zone.broadcastPacket(new SpecialCamera(npc, 1100, 0, -3, 300, 10000, 7000, 0, 0, 0, 0, 0));
startQuestTimer("START_MOVE", 1900, npc, null);
break;
}
case "SOCIAL":
{
zone.broadcastPacket(new SocialAction(npc.getObjectId(), 2));
break;
}
case "START_MOVE":
{
_fafurion.disableCoreAI(false);
_fafurion.setRandomWalking(true);
for (Player players : World.getInstance().getVisibleObjectsInRange(npc, Player.class, 4000))
{
if (players.isHero())
{
zone.broadcastPacket(new ExShowScreenMessage(NpcStringId.S1_YOU_CANNOT_HOPE_TO_DEFEAT_ME_WITH_YOUR_MEAGER_STRENGTH, 2, 4000, players.getName()));
break;
}
}
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(175745, 245178, -14848));
startQuestTimer("CHECK_ATTACK", 60000, npc, null);
startQuestTimer("SPAWN_MINION", 300000, npc, null);
break;
}
И что с SOCIAL делать?JavaScript:case "SPAWN_FAFURION": { _fafurion.disableCoreAI(true); _fafurion.setRandomWalking(false); _fafurion.teleToLocation(175745, 245178, -14848, 25000); setStatus(IN_FIGHT); _lastAttack = System.currentTimeMillis(); zone.broadcastPacket(new PlaySound("BS02_A")); startQuestTimer("CAMERA_1", 23, _fafurion, null); break; } case "CAMERA_1": { zone.broadcastPacket(new SpecialCamera(npc, 700, 13, -19, 0, 10000, 20000, 0, 0, 0, 0, 0)); startQuestTimer("CAMERA_2", 3000, npc, null); break; } case "CAMERA_2": { zone.broadcastPacket(new SpecialCamera(npc, 700, 13, 0, 6000, 10000, 20000, 0, 0, 0, 0, 0)); startQuestTimer("CAMERA_3", 10000, npc, null); break; } case "CAMERA_3": { zone.broadcastPacket(new SpecialCamera(npc, 3700, 0, -3, 0, 10000, 10000, 0, 0, 0, 0, 0)); zone.broadcastPacket(new SocialAction(npc.getObjectId(), 1)); startQuestTimer("CAMERA_4", 200, npc, null); startQuestTimer("SOCIAL", 5200, npc, null); break; } case "CAMERA_4": { zone.broadcastPacket(new SpecialCamera(npc, 1100, 0, -3, 22000, 10000, 30000, 0, 0, 0, 0, 0)); startQuestTimer("CAMERA_5", 10800, npc, null); break; } case "CAMERA_5": { zone.broadcastPacket(new SpecialCamera(npc, 1100, 0, -3, 300, 10000, 7000, 0, 0, 0, 0, 0)); startQuestTimer("START_MOVE", 1900, npc, null); break; } case "SOCIAL": { zone.broadcastPacket(new SocialAction(npc.getObjectId(), 2)); break; } case "START_MOVE": { _fafurion.disableCoreAI(false); _fafurion.setRandomWalking(true); for (Player players : World.getInstance().getVisibleObjectsInRange(npc, Player.class, 4000)) { if (players.isHero()) { zone.broadcastPacket(new ExShowScreenMessage(NpcStringId.S1_YOU_CANNOT_HOPE_TO_DEFEAT_ME_WITH_YOUR_MEAGER_STRENGTH, 2, 4000, players.getName())); break; } } npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(175745, 245178, -14848)); startQuestTimer("CHECK_ATTACK", 60000, npc, null); startQuestTimer("SPAWN_MINION", 300000, npc, null); break; }
попробовать SocialAction с разными ид социалок поотсылать
zone.broadcastPacket(new SocialAction(npc.getObjectId(), 1));
zone.broadcastPacket(new SocialAction(npc.getObjectId(), 2));
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?