Package ai.groups

Source Code of ai.groups.SeekerEscort

/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.groups;

import lineage2.commons.util.Rnd;
import lineage2.gameserver.ai.DefaultAI;
import lineage2.gameserver.model.Creature;
import lineage2.gameserver.model.Player;
import lineage2.gameserver.model.instances.NpcInstance;
import lineage2.gameserver.model.quest.QuestState;
import lineage2.gameserver.network.serverpackets.ExRotation;
import lineage2.gameserver.network.serverpackets.ExShowScreenMessage;
import lineage2.gameserver.network.serverpackets.components.ChatType;
import lineage2.gameserver.network.serverpackets.components.NpcString;
import lineage2.gameserver.scripts.Functions;
import quests._10365_SeekerEscort;

/**
* @author Mobius
* @version $Revision: 1.0 $
*/
public class SeekerEscort extends DefaultAI
{
  /**
   * Field SAY_INTERVAL. (value is 3000)
   */
  private static final int SAY_INTERVAL = 3000;
  /**
   * Field SAY_RAFF. (value is 50000)
   */
  private static final int SAY_RAFF = 50000;
  /**
   * Field SMP_COORDS.
   */
  private final static int[][] SMP_COORDS =
  {
    {
      -110648,
      238936,
      -2950
    },
    {
      -110840,
      239240,
      -2951
    },
    {
      -111000,
      239512,
      -2950
    },
    {
      -111096,
      239800,
      -2950
    },
    {
      -110728,
      240248,
      -2950
    },
    {
      -110776,
      240584,
      -2951
    },
    {
      -111064,
      240616,
      -2950
    },
    {
      -111304,
      240360,
      -2950
    },
    {
      -111672,
      239848,
      -2950
    },
    {
      -111944,
      239736,
      -2950
    },
    {
      -112296,
      239816,
      -2950
    },
    {
      -112616,
      239928,
      -2950
    },
    {
      -112696,
      240264,
      -2950
    },
    {
      -112456,
      240536,
      -2950
    },
    {
      -112120,
      240536,
      -2950
    },
    {
      -112024,
      240264,
      -2950
    },
    {
      -112216,
      240168,
      -2950
    },
    {
      -112328,
      240232,
      -2950
    },
  };
  /**
   * Field SMP_COORDS2.
   */
  private final static int[][] SMP_COORDS2 =
  {
    {
      -112776,
      234072,
      -3097
    },
    {
      -112376,
      233656,
      -3137
    },
    {
      -112184,
      233480,
      -3156
    },
    {
      -112152,
      233112,
      -3159
    },
    {
      -112472,
      232920,
      -3128
    },
    {
      -112712,
      232536,
      -3104
    },
    {
      -112504,
      232040,
      -3125
    },
    {
      -112248,
      232072,
      -3149
    },
    {
      -112088,
      232360,
      -3165
    },
    {
      -111720,
      232584,
      -3202
    },
    {
      -111240,
      232728,
      -3250
    },
    {
      -110792,
      232424,
      -3294
    },
    {
      -110776,
      232072,
      -3295
    },
    {
      -111144,
      231864,
      -3259
    },
    {
      -111512,
      231992,
      -3223
    },
    {
      -111784,
      231976,
      -3196
    },
    {
      -111736,
      231816,
      -3200
    },
  };
  /**
   * Field currentState.
   */
  private int currentState;
  /**
   * Field lastSayTime.
   */
  private long lastSayTime = 0;
  /**
   * Field lastSayTimer.
   */
  private long lastSayTimer = 0;
  /**
   * Field currentState1.
   */
  private int currentState1;
 
  /**
   * Constructor for SeekerEscort.
   * @param actor NpcInstance
   */
  public SeekerEscort(NpcInstance actor)
  {
    super(actor);
    currentState = 0;
    lastSayTime = 0;
    lastSayTimer = 0;
    currentState1 = 0;
  }
 
  /**
   * Method thinkActive.
   * @return boolean
   */
  @Override
  protected boolean thinkActive()
  {
    final NpcInstance actor = getActor();
    final Creature target = actor.getFollowTarget();
    int[][] coords = {};
    if ((target == null) || !(target instanceof Player))
    {
      actor.deleteMe();
      return false;
    }
    final Player player = target.getPlayer();
    final QuestState st = player.getQuestState(_10365_SeekerEscort.class);
    final int zone = st.getInt("zone");
    int saytimes = st.getInt("saytimes");
    final int cond = st.getCond();
    actor.setRunning();
    if ((saytimes == 9) || (cond == 0))
    {
      actor.deleteMe();
      st.set("seeksp", 0);
      st.set("zone", 1);
      st.unset("saytimes");
      target.sendPacket(new ExShowScreenMessage(NpcString.KING_HAS_RETURNED_TO_DEF_RETURN_TO_DEF_AND_START_AGAIN, 5500, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER));
      return false;
    }
    if ((lastSayTimer + SAY_RAFF) < System.currentTimeMillis())
    {
      lastSayTimer = System.currentTimeMillis();
      Functions.npcSay(actor, NpcString.RUFF_RUFF_RRRRRR, ChatType.NPC_SAY, 800, st.getPlayer().getName());
    }
    if (zone == 1)
    {
      coords = SMP_COORDS;
      if ((actor.getDistance(target) < 100) || (currentState >= coords.length) || (currentState == 0))
      {
        st.unset("saytimes");
        if (currentState < coords.length)
        {
          actor.moveToLocation(coords[currentState][0], coords[currentState][1], coords[currentState][2], Rnd.get(0, 50), true);
          if (actor.getDestination() == null)
          {
            ++currentState;
          }
        }
        else
        {
          actor.teleToLocation(-112776, 234072, -3097);
          st.set("zone", 2);
        }
      }
      else if (((lastSayTime + SAY_INTERVAL) < System.currentTimeMillis()) && (actor.getDestination() == null))
      {
        final int heading = actor.calcHeading(target.getX(), target.getY());
        actor.setHeading(heading);
        actor.broadcastPacket(new ExRotation(actor.getObjectId(), heading));
        lastSayTime = System.currentTimeMillis();
        target.sendPacket(new ExShowScreenMessage(NpcString.CATCH_UP_TO_KING_HES_WAITING, 1500, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER));
        st.set("saytimes", ++saytimes);
      }
    }
    else if (zone == 2)
    {
      if ((actor.getDistance(target) >= 100) && ((lastSayTime + SAY_INTERVAL) < System.currentTimeMillis()))
      {
        lastSayTime = System.currentTimeMillis();
        target.sendPacket(new ExShowScreenMessage(NpcString.YOU_MUST_MOVE_TO_EXPLORATION_AREA_5_IN_ORDER_TO_CONTINUE, 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER));
        st.set("saytimes", ++saytimes);
      }
      else if (actor.getDistance(target) < 100)
      {
        st.set("zone", 3);
      }
      st.unset("saytimes");
    }
    else if (zone == 3)
    {
      coords = SMP_COORDS2;
      if ((actor.getDistance(target) < 100) || (currentState1 >= coords.length))
      {
        if (currentState1 < coords.length)
        {
          st.unset("saytimes");
          actor.moveToLocation(coords[currentState1][0], coords[currentState1][1], coords[currentState1][2], Rnd.get(0, 50), true);
          if (actor.getDestination() == null)
          {
            ++currentState1;
          }
        }
        else
        {
          actor.deleteMe();
          st.set("seeksp", 0);
          st.set("zone", 1);
          st.setCond(2);
        }
      }
      else if (((lastSayTime + SAY_INTERVAL) < System.currentTimeMillis()) && (actor.getDestination() == null))
      {
        final int heading = actor.calcHeading(target.getX(), target.getY());
        actor.setHeading(heading);
        actor.broadcastPacket(new ExRotation(actor.getObjectId(), heading));
        lastSayTime = System.currentTimeMillis();
        target.sendPacket(new ExShowScreenMessage(NpcString.CATCH_UP_TO_KING_HES_WAITING, 1500, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER));
        st.set("saytimes", ++saytimes);
      }
    }
    return true;
  }
 
  /**
   * Method randomWalk.
   * @return boolean
   */
  @Override
  protected boolean randomWalk()
  {
    return false;
  }
}
TOP

Related Classes of ai.groups.SeekerEscort

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.