Package events.MasterOfEnchanting

Source Code of events.MasterOfEnchanting.MasterOfEnchanting

package events.MasterOfEnchanting;

import l2p.Config;
import l2p.extensions.scripts.Functions;
import l2p.extensions.scripts.ScriptFile;
import l2p.gameserver.Announcements;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2ObjectsStorage;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.L2Spawn;
import l2p.gameserver.model.instances.L2NpcInstance;
import l2p.gameserver.model.items.L2ItemInstance;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.util.Files;
import l2p.util.GArray;
import l2p.util.Rnd;

/**
* Master Of Enchanting Event
* Official website description event: http://www.lineage2.com/archive/2009/06/master_of_encha.html
* Development by L2Phoenix
* Last modify: 14.06.2010, Magister
*/
public class MasterOfEnchanting extends Functions implements ScriptFile
{
  private static final int MasterYogi = 32599;
  private static final int MasterYogiStaff = 13539;
  private static final int MasterYogiScroll = 13540;
  // Реюз на выдачу 24х скролов, в часах
  private static final int Scroll_24_reuse_time = 6;
  // Reward's
  private static final int Firework = 6406;
  private static final int LargeFirework = 6407;
  private static final int ScrollEnchantWeaponD = 955;
  private static final int ScrollEnchantArmorD = 956;
  private static final int ScrollEnchantWeaponC = 951;
  private static final int ScrollEnchantArmorC = 952;
  private static final int ScrollEnchantArmorB = 948;
  private static final int ScrollEnchantWeaponA = 729;
  private static final int SAccessoryChest = 13992;
  private static final int TopLifeStone76 = 8762;
  private static final int ScrollEnchantWeaponS = 959;
  private static final int SArmorChest = 13991;
  private static final int SWeaponChest = 13990;
  private static final int HighLifeStone76 = 8752;
  private static final int S80ArmorChest = 13989;
  private static final int S80WeaponChest = 13988;
  // Shadow Item - Top Hat
  // Shadow Item - Black Mask
  // Shadow Item - Rider Goggles
  private static final int[] HatShadowReward =
  {
    13074, 13075, 13076
  };
  // Event - Top Hat
  // Event - Black Mask
  // Event - Rider Goggles
  private static final int[] HatEventReward =
  {
    13518, 13519, 13522
  };
  private static final int[] CrystalReward =
  {
    9570, 9571, 9572
  };
  private static GArray<L2Spawn> _spawns = new GArray<L2Spawn>();
  private static boolean _active = false;

  @Override
  public void onLoad()
  {
    if(isActive())
    {
      _active = true;
      spawnEventManagers();
      System.out.println("Loaded Event: MasterOfEnchanting [state: activated]");
    }
    else
    {
      System.out.println("Loaded Event: MasterOfEnchanting [state: deactivated]");
    }
  }

  /**
   * Start Event
   */
  public void startEvent()
  {
    L2Player player = (L2Player) getSelf();
    if(!player.getPlayerAccess().IsEventGm)
    {
      return;
    }
    if(SetActive("MasterOfEnchanting", true))
    {
      spawnEventManagers();
      System.out.println("Event: 'MasterOfEnchanting' started.");
      Announcements.getInstance().announceByCustomMessage("scripts.events.MasterOfEnchanting.MasterOfEnchanting.AnnounceEventStarted", null);
    }
    else
    {
      player.sendMessage("Event 'MasterOfEnchanting' already started.");
    }
    _active = true;
    show(Files.read("data/html/admin/events.htm", player), player);
  }

  /**
   * Stop Event
   */
  public void stopEvent()
  {
    L2Player player = (L2Player) getSelf();
    if(!player.getPlayerAccess().IsEventGm)
    {
      return;
    }
    if(SetActive("MasterOfEnchanting", false))
    {
      unSpawnEventManagers();
      System.out.println("Event 'MasterOfEnchanting' stopped.");
      Announcements.getInstance().announceByCustomMessage("scripts.events.MasterOfEnchanting.MasterOfEnchanting.AnnounceEventStoped", null);
    }
    else
    {
      player.sendMessage("Event 'MasterOfEnchanting' not started.");
    }
    _active = false;
    show(Files.read("data/html/admin/events.htm", player), player);
  }

  @Override
  public void onReload()
  {
    unSpawnEventManagers();
  }

  @Override
  public void onShutdown()
  {
    unSpawnEventManagers();
  }

  /**
   * Event Drop
   */
  public static void OnDie(L2Character mob, L2Character killer)
  {
    if(_active && SimpleCheckDrop(mob, killer) && Rnd.get(1000) <= Config.ENCHANT_MASTER_DROP_CHANCE * killer.getPlayer().getRateItems() * Config.RATE_DROP_ITEMS * ((L2NpcInstance) mob).getTemplate().rateHp)
    {
      ((L2NpcInstance) mob).dropItem(killer.getPlayer(), MasterYogiScroll, 1);
    }
  }

  public static void OnPlayerEnter(int objectId)
  {
    if(_active)
    {
      L2Player player = L2ObjectsStorage.getPlayer(objectId);
      Announcements.getInstance().announceToPlayerByCustomMessage(player, "scripts.events.MasterOfEnchanting.MasterOfEnchanting.AnnounceEventStarted", null);
    }
  }

  /**
   * Base event statuc.
   */
  private static boolean isActive()
  {
    return IsActive("MasterOfEnchanting");
  }

  /**
   * Spawn event manager
   */
  private void spawnEventManagers()
  {
    final int EVENT_MANAGERS[][] =
    {
      {
        19541, 145419, -3103, 30419
      }, // Dion

      {
        148024, -57432, -2807, 9138
      }, // Goddard

      {
        110456, 220168, -3624, 63079
      }, // Heine

      {
        -81640, 150216, -3155, 42910
      }, // Gludin

      {
        147142, 28555, -2261, 59402
      }, // Aden

      {
        44296, -48392, -823, 23331
      }, // Rune

      {
        -13448, 122056, -3015, 40099
      }, // Gludio

      {
        116360, 75496, -2720, -2620
      }, // Hunter Vilage

      {
        82680, 54152, -1522, 58708
      }, // Oren

      {
        82088, 148328, -3472, -3372
      }, // Giran

      {
        87736, -141976, -1368, 57344
      } // Schuttgart
    };
    SpawnNPCs(MasterYogi, EVENT_MANAGERS, _spawns);
  }

  /**
   * Delete spawn manager
   */
  private void unSpawnEventManagers()
  {
    deSpawnNPCs(_spawns);
  }

  public void show(String var[])
  {
    L2Player player = (L2Player) getSelf();
    String dialog = Files.read(String.format("data/scripts/events/MasterOfEnchanting/%s", var[0]), player);
    dialog.replaceFirst("%StaffPrice%", String.valueOf(Config.ENCHANT_MASTER_STAFF_PRICE));
    dialog.replaceFirst("%24ScrollPrice%", String.valueOf(Config.ENCHANT_MASTER_24SCROLL_PRICE));
    dialog.replaceFirst("%1ScrollPrice%", String.valueOf(Config.ENCHANT_MASTER_1SCROLL_PRICE));
    show(dialog, player);
  }

  public void process(String var[])
  {
    L2Player player = (L2Player) getSelf();
    String htmltext = null;
    if(var[0].equalsIgnoreCase("buy_staff"))
    {
      if(getItemCount(player, MasterYogiStaff) == 0 && getItemCount(player, Config.ENCHANT_MASTER_PRICE_ID) > Config.ENCHANT_MASTER_STAFF_PRICE)
      {
        removeItem(player, Config.ENCHANT_MASTER_PRICE_ID, Config.ENCHANT_MASTER_STAFF_PRICE);
        addItem(player, MasterYogiStaff, 1);
        htmltext = "32599-staffbuyed.htm";
      }
      else
      {
        htmltext = "32599-staffcant.htm";
      }
    }
    else if(var[0].equalsIgnoreCase("buy_scroll_24"))
    {
      long curr_time = System.currentTimeMillis();
      String value = player.getVar("MasterOfEnchanting");
      long reuse_time = value == null ? 0 : Long.parseLong(value);
      if(curr_time > reuse_time)
      {
        if(getItemCount(player, Config.ENCHANT_MASTER_PRICE_ID) > Config.ENCHANT_MASTER_24SCROLL_PRICE)
        {
          removeItem(player, Config.ENCHANT_MASTER_PRICE_ID, Config.ENCHANT_MASTER_24SCROLL_PRICE);
          addItem(player, MasterYogiScroll, 24);
          player.setVar("MasterOfEnchanting", Long.toString(curr_time + Scroll_24_reuse_time * 3600000));
          htmltext = "32599-scroll24.htm";
        }
        else
        {
          htmltext = "32599-s24-no.htm";
        }
      }
      else
      {
        long remaining_time = (reuse_time - curr_time) / 1000;
        int hours = (int) remaining_time / 3600;
        int minutes = ((int) remaining_time % 3600) / 60;
        if(hours > 0)
        {
          player.sendPacket(new SystemMessage(SystemMessage.THERE_ARE_S1_HOURSS_AND_S2_MINUTES_REMAINING_UNTIL_THE_TIME_WHEN_THE_ITEM_CAN_BE_PURCHASED).addNumber(hours).addNumber(minutes));
          htmltext = "32599-scroll24.htm";
        }
        else if(minutes >= 0)
        {
          player.sendPacket(new SystemMessage(SystemMessage.THERE_ARE_S1_MINUTES_REMAINING_UNTIL_THE_TIME_WHEN_THE_ITEM_CAN_BE_PURCHASED).addNumber(minutes));
          htmltext = "32599-scroll24.htm";
        }
        else
        {
          if(getItemCount(player, Config.ENCHANT_MASTER_PRICE_ID) > Config.ENCHANT_MASTER_24SCROLL_PRICE)
          {
            removeItem(player, Config.ENCHANT_MASTER_PRICE_ID, Config.ENCHANT_MASTER_24SCROLL_PRICE);
            addItem(player, MasterYogiScroll, 24);
            player.setVar("MasterOfEnchanting", Long.toString(curr_time + Scroll_24_reuse_time * 3600000));
            htmltext = "32599-scroll24.htm";
          }
          else
          {
            htmltext = "32599-s24-no.htm";
          }
        }
      }
    }
    else if(var[0].equalsIgnoreCase("buy_scroll_1"))
    {
      if(getItemCount(player, Config.ENCHANT_MASTER_PRICE_ID) > Config.ENCHANT_MASTER_1SCROLL_PRICE)
      {
        removeItem(player, Config.ENCHANT_MASTER_PRICE_ID, Config.ENCHANT_MASTER_1SCROLL_PRICE);
        addItem(player, MasterYogiScroll, 1);
        htmltext = "32599-scroll-ok.htm";
      }
      else
      {
        htmltext = "32599-s1-no.htm";
      }
    }
    else if(var[0].equalsIgnoreCase("receive_reward"))
    {
      L2ItemInstance staff = player.getActiveWeaponInstance();
      if(staff != null && staff.getItemId() == MasterYogiStaff && staff.getEnchantLevel() > 3)
      {
        switch(staff.getEnchantLevel())
        {
          case 4:
            addItem(player, Firework, 1);
            break;
          case 5:
            addItem(player, Firework, 2);
            addItem(player, LargeFirework, 1);
            break;
          case 6:
            addItem(player, Firework, 3);
            addItem(player, LargeFirework, 2);
            break;
          case 7:
            addItem(player, HatShadowReward[Rnd.get(3)], 1);
            break;
          case 8:
            addItem(player, ScrollEnchantWeaponD, 1);
            break;
          case 9:
            addItem(player, ScrollEnchantWeaponD, 1);
            addItem(player, ScrollEnchantArmorD, 1);
            break;
          case 10:
            addItem(player, ScrollEnchantWeaponC, 1);
            break;
          case 11:
            addItem(player, ScrollEnchantWeaponC, 1);
            addItem(player, ScrollEnchantArmorC, 1);
            break;
          case 12:
            addItem(player, ScrollEnchantArmorB, 1);
            break;
          case 13:
            addItem(player, ScrollEnchantWeaponA, 1);
            break;
          case 14:
            addItem(player, HatEventReward[Rnd.get(3)], 1);
            break;
          case 15:
            addItem(player, SAccessoryChest, 1);
            break;
          case 16:
            addItem(player, TopLifeStone76, 1);
            break;
          case 17:
            addItem(player, ScrollEnchantWeaponS, 1);
            break;
          case 18:
            addItem(player, SArmorChest, 1);
            break;
          case 19:
            addItem(player, SWeaponChest, 1);
            break;
          case 20:
            addItem(player, CrystalReward[Rnd.get(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
            break;
          case 21:
            addItem(player, TopLifeStone76, 1);
            addItem(player, HighLifeStone76, 1);
            addItem(player, CrystalReward[Rnd.get(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
            break;
          case 22:
            addItem(player, S80ArmorChest, 1);
            break;
          default:
            if(staff.getEnchantLevel() > 22)
            {
              addItem(player, S80WeaponChest, 1);
            }
            break;
        }
        if(staff.isEquipped())
        {
          player.getInventory().unEquipItemInSlot(staff.getEquipSlot());
        }
        L2ItemInstance destroyedItem = player.getInventory().destroyItem(staff.getObjectId(), 1, true);
        if(destroyedItem == null)
        {
          System.out.println("ERROR: Failed to destroy " + staff.getObjectId() + " after reciving reward in event MasterOfEnchanting by " + player.getName());
          player.sendActionFailed();
        }
        htmltext = "32599-rewardok.htm";
      }
      else
      {
        htmltext = "32599-rewardnostaff.htm";
      }
    }
    if(htmltext != null)
    {
      show(Files.read(String.format("data/scripts/events/MasterOfEnchanting/%s", htmltext), player), player);
    }
  }

  public String DialogAppend_32599(Integer val)
  {
    if(val != 0)
    {
      return "";
    }
    L2Player player = (L2Player) getSelf();
    return Files.read("data/scripts/events/MasterOfEnchanting/32599.htm", player);
  }
}
TOP

Related Classes of events.MasterOfEnchanting.MasterOfEnchanting

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.