Package quests

Source Code of quests._350_EnhanceYourWeapon$PlayerResult

/*
* 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 quests;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import lineage2.commons.util.Rnd;
import lineage2.gameserver.Config;
import lineage2.gameserver.data.xml.holder.NpcHolder;
import lineage2.gameserver.data.xml.holder.SoulCrystalHolder;
import lineage2.gameserver.model.Player;
import lineage2.gameserver.model.instances.MonsterInstance;
import lineage2.gameserver.model.instances.NpcInstance;
import lineage2.gameserver.model.items.ItemInstance;
import lineage2.gameserver.model.quest.Quest;
import lineage2.gameserver.model.quest.QuestState;
import lineage2.gameserver.network.serverpackets.SystemMessage2;
import lineage2.gameserver.network.serverpackets.components.SystemMsg;
import lineage2.gameserver.scripts.ScriptFile;
import lineage2.gameserver.templates.SoulCrystal;
import lineage2.gameserver.templates.npc.AbsorbInfo;
import lineage2.gameserver.templates.npc.NpcTemplate;

public class _350_EnhanceYourWeapon extends Quest implements ScriptFile
{
  private static class PlayerResult
  {
    private final Player _player;
    private SystemMsg _message;
   
    public PlayerResult(Player player)
    {
      _player = player;
    }
   
    public Player getPlayer()
    {
      return _player;
    }
   
    public SystemMsg getMessage()
    {
      return _message;
    }
   
    public void setMessage(SystemMsg message)
    {
      _message = message;
    }
   
    public void send()
    {
      if (_message != null)
      {
        _player.sendPacket(_message);
      }
    }
  }
 
  private static final int RED_SOUL_CRYSTAL0_ID = 4629;
  private static final int GREEN_SOUL_CRYSTAL0_ID = 4640;
  private static final int BLUE_SOUL_CRYSTAL0_ID = 4651;
  private static final int Jurek = 30115;
  private static final int Gideon = 30194;
  private static final int Winonin = 30856;
 
  @Override
  public void onLoad()
  {
  }
 
  @Override
  public void onReload()
  {
  }
 
  @Override
  public void onShutdown()
  {
  }
 
  public _350_EnhanceYourWeapon()
  {
    super(false);
    addStartNpc(Jurek);
    addStartNpc(Gideon);
    addStartNpc(Winonin);
    for (NpcTemplate template : NpcHolder.getInstance().getAll())
    {
      if ((template != null) && !template.getAbsorbInfo().isEmpty())
      {
        addKillId(template.npcId);
      }
    }
  }
 
  @Override
  public String onEvent(String event, QuestState st, NpcInstance npc)
  {
    if (event.equalsIgnoreCase(Jurek + "-04.htm") || event.equalsIgnoreCase(Gideon + "-04.htm") || event.equalsIgnoreCase(Winonin + "-04.htm"))
    {
      st.setCond(1);
      st.setState(STARTED);
      st.playSound(SOUND_ACCEPT);
    }
    if (event.equalsIgnoreCase(Jurek + "-09.htm") || event.equalsIgnoreCase(Gideon + "-09.htm") || event.equalsIgnoreCase(Winonin + "-09.htm"))
    {
      st.giveItems(RED_SOUL_CRYSTAL0_ID, 1);
    }
    if (event.equalsIgnoreCase(Jurek + "-10.htm") || event.equalsIgnoreCase(Gideon + "-10.htm") || event.equalsIgnoreCase(Winonin + "-10.htm"))
    {
      st.giveItems(GREEN_SOUL_CRYSTAL0_ID, 1);
    }
    if (event.equalsIgnoreCase(Jurek + "-11.htm") || event.equalsIgnoreCase(Gideon + "-11.htm") || event.equalsIgnoreCase(Winonin + "-11.htm"))
    {
      st.giveItems(BLUE_SOUL_CRYSTAL0_ID, 1);
    }
    if (event.equalsIgnoreCase("exit.htm"))
    {
      st.exitCurrentQuest(true);
    }
    return event;
  }
 
  @Override
  public String onTalk(NpcInstance npc, QuestState st)
  {
    String npcId = str(npc.getNpcId());
    String htmltext = "noquest";
    int id = st.getState();
    if ((st.getQuestItemsCount(RED_SOUL_CRYSTAL0_ID) == 0) && (st.getQuestItemsCount(GREEN_SOUL_CRYSTAL0_ID) == 0) && (st.getQuestItemsCount(BLUE_SOUL_CRYSTAL0_ID) == 0))
    {
      if (id == CREATED)
      {
        htmltext = npcId + "-01.htm";
      }
      else
      {
        htmltext = npcId + "-21.htm";
      }
    }
    else
    {
      if (id == CREATED)
      {
        st.setCond(1);
        st.setState(STARTED);
      }
      htmltext = npcId + "-03.htm";
    }
    return htmltext;
  }
 
  @Override
  public String onKill(NpcInstance npc, QuestState qs)
  {
    Player player = qs.getPlayer();
    if ((player == null) || !npc.isMonster())
    {
      return null;
    }
    List<PlayerResult> list;
    if (player.getParty() == null)
    {
      list = new ArrayList<>(1);
      list.add(new PlayerResult(player));
    }
    else
    {
      list = new ArrayList<>(player.getParty().getMemberCount());
      list.add(new PlayerResult(player));
      for (Player m : player.getParty().getPartyMembers())
      {
        if ((m != player) && m.isInRange(npc.getLoc(), Config.ALT_PARTY_DISTRIBUTION_RANGE))
        {
          list.add(new PlayerResult(m));
        }
      }
    }
    for (AbsorbInfo info : npc.getTemplate().getAbsorbInfo())
    {
      calcAbsorb(list, (MonsterInstance) npc, info);
    }
    for (PlayerResult r : list)
    {
      r.send();
    }
    return null;
  }
 
  private void calcAbsorb(List<PlayerResult> players, MonsterInstance npc, AbsorbInfo info)
  {
    int memberSize = 0;
    List<PlayerResult> targets;
    switch (info.getAbsorbType())
    {
      case LAST_HIT:
        targets = Collections.singletonList(players.get(0));
        break;
      case PARTY_ALL:
        targets = players;
        break;
      case PARTY_RANDOM:
        memberSize = players.size();
        if (memberSize == 1)
        {
          targets = Collections.singletonList(players.get(0));
        }
        else
        {
          int size = Rnd.get(memberSize);
          targets = new ArrayList<>(size);
          List<PlayerResult> temp = new ArrayList<>(players);
          Collections.shuffle(temp);
          for (int i = 0; i < size; i++)
          {
            targets.add(temp.get(i));
          }
        }
        break;
      case PARTY_ONE:
        memberSize = players.size();
        if (memberSize == 1)
        {
          targets = Collections.singletonList(players.get(0));
        }
        else
        {
          int rnd = Rnd.get(memberSize);
          targets = Collections.singletonList(players.get(rnd));
        }
        break;
      default:
        return;
    }
    for (PlayerResult target : targets)
    {
      if ((target == null) || (target.getMessage() == SystemMsg.THE_SOUL_CRYSTAL_SUCCEEDED_IN_ABSORBING_A_SOUL))
      {
        continue;
      }
      Player targetPlayer = target.getPlayer();
      if (info.isSkill() && !npc.isAbsorbed(targetPlayer))
      {
        continue;
      }
      if (targetPlayer.getQuestState(_350_EnhanceYourWeapon.class) == null)
      {
        continue;
      }
      boolean resonation = false;
      SoulCrystal soulCrystal = null;
      ItemInstance[] items = targetPlayer.getInventory().getItems();
      for (ItemInstance item : items)
      {
        SoulCrystal crystal = SoulCrystalHolder.getInstance().getCrystal(item.getItemId());
        if (crystal == null)
        {
          continue;
        }
        target.setMessage(SystemMsg.THE_SOUL_CRYSTAL_WAS_NOT_ABLE_TO_ABSORB_THE_SOUL);
        if (soulCrystal != null)
        {
          target.setMessage(SystemMsg.THE_SOUL_CRYSTAL_CAUSED_RESONATION_AND_FAILED_AT_ABSORBING_A_SOUL);
          break;
        }
        soulCrystal = crystal;
      }
      if (resonation)
      {
        continue;
      }
      if (soulCrystal == null)
      {
        continue;
      }
      if (!info.canAbsorb(soulCrystal.getLevel() + 1))
      {
        target.setMessage(SystemMsg.THE_SOUL_CRYSTAL_IS_REFUSING_TO_ABSORB_THE_SOUL);
        continue;
      }
      int nextItemId = 0;
      if ((info.getCursedChance() > 0) && (soulCrystal.getCursedNextItemId() > 0))
      {
        nextItemId = Rnd.chance(info.getCursedChance()) ? soulCrystal.getCursedNextItemId() : 0;
      }
      if (nextItemId == 0)
      {
        nextItemId = Rnd.chance(info.getChance()) ? soulCrystal.getNextItemId() : 0;
      }
      if (nextItemId == 0)
      {
        target.setMessage(SystemMsg.THE_SOUL_CRYSTAL_WAS_NOT_ABLE_TO_ABSORB_THE_SOUL);
        continue;
      }
      if (targetPlayer.consumeItem(soulCrystal.getItemId(), 1))
      {
        targetPlayer.getInventory().addItem(nextItemId, 1);
        targetPlayer.sendPacket(SystemMessage2.obtainItems(nextItemId, 1, 0));
        target.setMessage(SystemMsg.THE_SOUL_CRYSTAL_SUCCEEDED_IN_ABSORBING_A_SOUL);
      }
      else
      {
        target.setMessage(SystemMsg.THE_SOUL_CRYSTAL_WAS_NOT_ABLE_TO_ABSORB_THE_SOUL);
      }
    }
  }
}
TOP

Related Classes of quests._350_EnhanceYourWeapon$PlayerResult

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.