↑ ↓

Help me Слетают баффы при телепортаций.

Тема в разделе "Помощь", создана пользователем yecgaaj, 5 янв 2023.

  1. TopicStarter Overlay
    Offline

    yecgaaj Рядовой

    43
    5
    41
    Кредиты:
    $386,88
    Репутация:
    1
    Подскажите где копать что бы исправить эту фигню.
    Сборка aion-svn-Unique 5.8 Находиться у меня на Please login or register to view links
    Когда персонаж телепортируется с него слетают все бафы, свитки, банки и так далее. В основном это происходит когда персонаж телепортируется в данж. Когда используешь телепортацию гм по нику нпс из одной локи в другую тоже слетают , а когда по самой локе все нормально.
    Дайте совет в каком месте это править ?.
     
  2. Offline

    klubheads Сержант Команда форума Модератор

    2.011
    356
    189
    Кредиты:
    $2.142,45
    Репутация:
    54
    В данжи которые сделаны под autogrup так и должно быть(пример дерики арены и т.п). В версиях 5+ и выше они почти все такие.
    Каждую версию игры нужно рассматривать в отдельном контексте.

    На видео был момент, когда из локации в локацию слетел баф, но там тоже желательно тестировать на обычном персонаже(без админки).
    В принципе при желании это всё поправимо.
     
    Последнее редактирование: 6 янв 2023
  3. TopicStarter Overlay
    Offline

    yecgaaj Рядовой

    43
    5
    41
    Кредиты:
    $386,88
    Репутация:
    1
    Даже без админ прав все слетает, Хотелось бы это исправить ну или сделать по другому. Скажи в каких файлах это можно изменить. а я уже исправлю.
     
  4. TopicStarter Overlay
    Offline

    yecgaaj Рядовой

    43
    5
    41
    Кредиты:
    $386,88
    Репутация:
    1
    Просто добавлю что есть еще сборка Aion-Dream-master там можно зайти с клиента 5.8 , но проблем таких там нет. Я все копаю TeleportService2 но походу это не там.
     
  5. Offline

    klubheads Сержант Команда форума Модератор

    2.011
    356
    189
    Кредиты:
    $2.142,45
    Репутация:
    54
    Вот я тоже не помню проблем подобного рода в сборке ENCOM, а это что ты показал одна из её модификаций.
    Please login or register to view links, как вариант, попробуй отключить fasttrack(в этой сборке a_station) a_station.properties и world.properties (gameserver.world.emulate.a.station).
     
    Последнее редактирование: 6 янв 2023
  6. TopicStarter Overlay
    Offline

    yecgaaj Рядовой

    43
    5
    41
    Кредиты:
    $386,88
    Репутация:
    1
    Все выключено уже давно.
     
  7. Offline

    SG Shaiy Ефрейтор

    402
    95
    61
    Кредиты:
    $15.767,72
    Репутация:
    9
    Насколько помню обычно ставят удаление бафов в PlayerController, но чтобы конкретно знать какие эффекты убирать в той или иной карте надо смотреть в клиенте файл WorldId.xml, там есть атрибут skill_prohibit_set_id, потом смотришь client_skill_prohibit.xml, в нём указаны скиллы какие удаляются при телепорте на карты или выходе с карты, в общем по изучайте.
    Также есть файл в котором указаны предметы которые должны удалятся при выходе с карты или в ходе client_item_prohibit.xml.
    Возможно в старых версиях точно не помню с каких нет таких файлов, но по моему с версии 2,7 они есть.
     
    yecgaaj нравится это.
  8. TopicStarter Overlay
    Offline

    yecgaaj Рядовой

    43
    5
    41
    Кредиты:
    $386,88
    Репутация:
    1
    Спасибо за описание того как это должно работать , но это пока не мой уровень. Но благодаря вам я нашел как исправить хотя бы исчизание бафоф.
    в PlayerController Закомментировал строку и перестало пропадать.
    // TODO [AT] move
    public void onLeaveWorld() {
    ProtectorConquerorService.getInstance().onLeaveMap(getOwner());
    //InstanceService.onLeaveInstance(getOwner());
    }
     
  9. TopicStarter Overlay
    Offline

    yecgaaj Рядовой

    43
    5
    41
    Кредиты:
    $386,88
    Репутация:
    1
    Это помогло , но это добавляет другой баг, При заходе в данж , на персонажа вешается бафф , после выхода из данжа он не снимается , пока не пройдет время* которое указано на том или инном баффе.
    Хотя если смотреть на другие сборки там это реализовано по другому.

    // TODO [AT] move
    public void onLeaveWorld() {
    InstanceService.onLeaveInstance(getOwner());
    }

    // TODO [AT] move
    public void onLeaveWorld() {
    InstanceService.onLeaveInstance(getOwner());
    }

    Если делать так же как и в других , убирая строку: ProtectorConquerorService.getInstance().onLeaveMap(getOwner()); То баг остаётся.
    Если лесть глубже в сервис ProtectorConquerorService(Этого сервиса нету в других сборках есть подобный в другой сборке 3.9 SerialKillerService), а там в onLeaveMap

    public void onLeaveMap(Player player) {
    int worldId = player.getWorldId();
    if (!isHandledWorld(worldId)) {
    return;
    } if (!isEnemyWorld(player)) { //Protector.
    Protector info = player.getProtectorInfo();
    FastList<Player> kill = new FastList<Player>();
    FastMap<Integer, Player> guards = getWorldProtector(worldId);
    kill.addAll(guards.values());
    guards.remove(player.getObjectId());
    if (info.getRank() > 0) {
    info.setRank(0);
    protectorBuff.endEffect(player);
    for (Player victim: World.getInstance().getWorldMap(worldId).getWorldMapInstanceById(player.getInstanceId()).getPlayersInside()) {
    if (!player.getRace().equals(victim.getRace())) {
    PacketSendUtility.sendPacket(victim, new SM_CONQUEROR_PROTECTOR(kill));
    }
    }
    }
    } else if (isEnemyWorld(player)) { //Conqueror.
    Conqueror info = player.getConquerorInfo();
    FastList<Player> kill = new FastList<Player>();
    FastMap<Integer, Player> killers = getWorldConqueror(worldId);
    kill.addAll(killers.values());
    killers.remove(player.getObjectId());
    if (info.getRank() > 0) {
    info.setRank(0);
    conquerorBuff.endEffect(player);
    for (Player victim : World.getInstance().getWorldMap(worldId).getWorldMapInstanceById(player.getInstanceId()).getPlayersInside()) {
    if (!player.getRace().equals(victim.getRace())) {
    PacketSendUtility.sendPacket(victim, new SM_CONQUEROR_PROTECTOR(kill));
    }
    }
    }
    }
    }

    public void onLeaveMap(Player player) {
    int worldId = player.getWorldId();

    if (!isHandledWorld(worldId)) {
    return;
    }

    if (isEnemyWorld(player)) {
    SerialKiller info = player.getSKInfo();
    FastList<Player> kill = new FastList<Player>();
    FastMap<Integer, Player> killers = getWorldKillers(worldId);
    kill.addAll(killers.values());
    killers.remove(player.getObjectId());
    if (info.getRank() > 0) {
    info.setRank(0);

    for (Player victim : World.getInstance().getWorldMap(worldId).
    getWorldMapInstanceById(player.getInstanceId()).getPlayersInside()) {
    if (!player.getRace().equals(victim.getRace())) {
    PacketSendUtility.sendPacket(victim, new SM_SERIAL_KILLER(kill));
    }
    }
    }
    }
    }

    Между ними есть разница в сервисе ProtectorConquerorService имеется разделения на Protector и Conqueror. А SerialKillerService а тут один аля реализован легче. Короче мне не понять (.
     
  10. TopicStarter Overlay
    Offline

    yecgaaj Рядовой

    43
    5
    41
    Кредиты:
    $386,88
    Репутация:
    1
    Хе, делаю быстрее чем думаю . В общем моей голове нет покоя , лиж-бы усложнить все себе, оказалось все намного проще ... InstanceService.onLeaveInstance
    public static void onLeaveInstance(Player player) {
    player.getPosition().getWorldMapInstance().getInstanceHandler().onLeaveInstance(player);
    for (Item item : player.getInventory().getItems()) {
    if (item.getItemTemplate().getOwnershipWorld() == player.getWorldId()) {
    player.getInventory().decreaseByObjectId(item.getObjectId(), item.getItemCount());
    }
    for (Effect ef: player.getEffectController().getAbnormalEffects()) {
    DispelCategoryType category = ef.getSkillTemplate().getDispelCategory();
    if (category == DispelCategoryType.NONE ||
    category == DispelCategoryType.ALL ||
    category == DispelCategoryType.BUFF ||
    category == DispelCategoryType.DEBUFF ||
    category == DispelCategoryType.DEBUFF_MENTAL ||
    category == DispelCategoryType.DEBUFF_PHYSICAL ||
    category == DispelCategoryType.EXTRA ||
    category == DispelCategoryType.NEVER ||
    category == DispelCategoryType.NPC_BUFF ||
    category == DispelCategoryType.NPC_DEBUFF_PHYSICAL ||
    category == DispelCategoryType.STUN) {
    ef.endEffect();
    player.getEffectController().clearEffect(ef);
    }
    }
    if (AutoGroupConfig.AUTO_GROUP_ENABLED) {
    AutoGroupService.getInstance().onLeaveInstance(player);
    }
    }

    public static void onLeaveInstance(Player player) {
    player.getPosition().getWorldMapInstance().getInstanceHandler().onLeaveInstance(player);
    for (Item item : player.getInventory().getItems()) {
    if (item.getItemTemplate().getOwnershipWorld() == player.getWorldId()) {
    player.getInventory().decreaseByObjectId(item.getObjectId(), item.getItemCount());
    }
    }
    if (AutoGroupConfig.AUTO_GROUP_ENABLED) {
    AutoGroupService.getInstance().onLeaveInstance(player);
    }
    }
    Это решение самого бафа , что бы оно не исчезало после телепортаций. Но учитывая слова Please login or register to view links нужно это делать все по уму.