@Override
 protected void handleDialogStart(Player player) {
   checkDialog(player);
   if (player.getLegion() != null) {
     int SiegeId = ((SiegeNpc) this.getOwner()).getSiegeId();
     SiegeLocation Location = SiegeService.getInstance().getSiegeLocation(SiegeId);
     if (Location != null) {
       if (Location.getLegionId() == player.getLegion().getLegionId()) {
         PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 10));
         return;
       }
     }
   }
   PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 1011));
 }
  @Override
  protected void runImpl() {
    Player activePlayer = getConnection().getActivePlayer();

    if (activePlayer.getHouseRegistry() != null) sendPacket(new SM_HOUSE_OBJECTS(activePlayer));
    if (activePlayer.isInInstance()) {
      sendPacket(
          new SM_INSTANCE_COUNT_INFO(activePlayer.getWorldId(), activePlayer.getInstanceId()));
    }
    if (activePlayer.getItemEffectId() <= 1) activePlayer.updataItemEffectId();
    sendPacket(new SM_PLAYER_INFO(activePlayer, false));
    activePlayer.getController().startProtectionActiveTask();
    sendPacket(
        new SM_MOTION(activePlayer.getObjectId(), activePlayer.getMotions().getActiveMotions()));

    WindstreamTemplate template =
        DataManager.WINDSTREAM_DATA.getStreamTemplate(activePlayer.getPosition().getMapId());
    Location2D location;
    if (template != null)
      for (int i = 0; i < template.getLocations().getLocation().size(); i++) {
        location = template.getLocations().getLocation().get(i);
        sendPacket(
            new SM_WINDSTREAM_ANNOUNCE(
                location.getFlyPathType().getId(),
                template.getMapid(),
                location.getId(),
                location.getState()));
      }
    location = null;
    template = null;

    /** Spawn player into the world. */
    // If already spawned, despawn before spawning into the world
    if (activePlayer.isSpawned()) World.getInstance().despawn(activePlayer);
    World.getInstance().spawn(activePlayer);

    activePlayer.getController().refreshZoneImpl();

    // because fortress buff should only be avaible in fortress 5011-6011-6021
    SiegeService.getInstance().fortressBuffRemove(activePlayer);

    // SM_SHIELD_EFFECT, SM_ABYSS_ARTIFACT_INFO3
    if (activePlayer.isInSiegeWorld()) {
      SiegeService.getInstance().onEnterSiegeWorld(activePlayer);
    }

    // SM_NPC_INFO
    BaseService.getInstance().onEnterBaseWorld(activePlayer);

    // SM_SERIAL_KILLER
    SerialKillerService.getInstance().onEnterMap(activePlayer);

    // SM_RIFT_ANNOUNCE
    // RiftInformer.sendRiftsInfo(activePlayer);
    InstanceRiftSpawnManager.sendInstanceRiftStatus(activePlayer);

    // SM_UPGRADE_ARCADE
    // sendPacket(new SM_UPGRADE_ARCADE(true));

    // SM_NEARBY_QUESTS
    activePlayer.getController().updateNearbyQuests();

    /** Loading weather for the player's region */
    WeatherService.getInstance().loadWeather(activePlayer);

    QuestEngine.getInstance().onEnterWorld(new QuestEnv(null, activePlayer, 0, 0));

    activePlayer.getController().onEnterWorld();

    // zone channel message (is this must be here?)
    if (!WorldMapType.getWorld(activePlayer.getWorldId()).isPersonal())
      sendPacket(new SM_SYSTEM_MESSAGE(1390122, activePlayer.getPosition().getInstanceId()));

    activePlayer.getEffectController().updatePlayerEffectIcons();
    sendPacket(SM_CUBE_UPDATE.cubeSize(StorageType.CUBE, activePlayer));

    Pet pet = activePlayer.getPet();
    if (pet != null && !pet.isSpawned()) World.getInstance().spawn(pet);
    activePlayer.setPortAnimation(0);

    TownService.getInstance().onEnterWorld(activePlayer);
  }