コード例 #1
0
  @Override
  public void onRespawn() {
    super.onRespawn();

    cancelTask(TaskId.DECAY);

    Npc owner = getOwner();

    if (owner != null && owner.isCustom()) {
      DAOManager.getDAO(SpawnDAO.class)
          .setSpawned(owner.getSpawn().getSpawnId(), owner.getObjectId(), true);
    }

    // set state from npc templates
    if (owner.getObjectTemplate().getState() != 0)
      owner.setState(owner.getObjectTemplate().getState());
    else owner.setState(CreatureState.NPC_IDLE);

    owner.getLifeStats().setCurrentHpPercent(100);
    owner.getLifeStats().setCurrentMpPercent(100);
    owner.getAi().handleEvent(Event.RESPAWNED);

    if (owner.getSpawn().getNpcFlyState() != 0) {
      owner.setState(CreatureState.FLYING);
    }
  }
コード例 #2
0
 /**
  * Constructs new <tt>SM_NPC_INFO </tt> packet
  *
  * @param npc visible npc.
  * @param player
  */
 public SM_NPC_INFO(Npc npc, Player player) {
   this.npc = npc;
   npcTemplate = npc.getObjectTemplate();
   if (npcTemplate.getNpcType() == NpcType.NEUTRAL
       || npcTemplate.getNpcType() == NpcType.ARTIFACT) {
     if (player.isAggroIconTo(npc.getTribe())) npcTypeId = NpcType.NEUTRAL.getId();
     else npcTypeId = NpcType.NON_ATTACKABLE.getId();
   } else {
     npcTypeId =
         (player.isAggroIconTo(npc.getTribe())
             ? NpcType.AGGRESSIVE.getId()
             : npcTemplate.getNpcType().getId());
   }
   npcId = npc.getNpcId();
 }
コード例 #3
0
  @Override
  public void onAttack(
      final Creature creature,
      int skillId,
      TYPE type,
      int damage,
      boolean notifyAttackedObservers) {
    if (getOwner().getLifeStats().isAlreadyDead()) return;

    super.onAttack(creature, skillId, type, damage, notifyAttackedObservers);

    Npc npc = getOwner();

    Creature actingCreature = creature.getActingCreature();
    if (actingCreature instanceof Player)
      if (QuestEngine.getInstance().onAttack(new QuestCookie(npc, (Player) actingCreature, 0, 0)))
        return;

    AI<?> ai = npc.getAi();
    if (ai instanceof DummyAi) {
      log.warn("CHECKPOINT: npc attacked without ai " + npc.getObjectTemplate().getTemplateId());
      return;
    }
    if (getOwner().getTribe().equals("DUMMY")) damage = 0;

    getOwner()
        .getKnownList()
        .doOnAllNpcs(
            new Executor<Npc>() {
              @Override
              public boolean run(Npc tmp) {
                if (getOwner().isSupportFrom(tmp) && MathUtil.isInRange(getOwner(), tmp, 10)) {
                  tmp.getAggroList().addHate(creature, 10);
                }
                return true;
              }
            },
            true);

    npc.getLifeStats().reduceHp(damage, actingCreature);

    PacketSendUtility.broadcastPacket(npc, new SM_ATTACK_STATUS(npc, type, skillId, damage));
  }