123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- /*
- * Copyright (C) 2004-2015 L2J DataPack
- *
- * This file is part of L2J DataPack.
- *
- * L2J DataPack 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.
- *
- * L2J DataPack 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 handlers.bypasshandlers;
- import java.text.DateFormat;
- import com.l2jserver.Config;
- import com.l2jserver.gameserver.handler.IBypassHandler;
- import com.l2jserver.gameserver.idfactory.IdFactory;
- import com.l2jserver.gameserver.instancemanager.games.Lottery;
- import com.l2jserver.gameserver.model.actor.L2Character;
- import com.l2jserver.gameserver.model.actor.L2Npc;
- import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
- import com.l2jserver.gameserver.network.SystemMessageId;
- import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
- import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
- import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
- import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
- public class Loto implements IBypassHandler
- {
- private static final String[] COMMANDS =
- {
- "Loto"
- };
-
- @Override
- public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
- {
- if (!target.isNpc())
- {
- return false;
- }
-
- int val = 0;
- try
- {
- val = Integer.parseInt(command.substring(5));
- }
- catch (IndexOutOfBoundsException ioobe)
- {
- }
- catch (NumberFormatException nfe)
- {
- }
- if (val == 0)
- {
- // new loto ticket
- for (int i = 0; i < 5; i++)
- {
- activeChar.setLoto(i, 0);
- }
- }
- showLotoWindow(activeChar, (L2Npc) target, val);
-
- return false;
- }
-
- /**
- * Open a Loto window on client with the text of the L2NpcInstance.<BR>
- * <BR>
- * <B><U> Actions</U> :</B><BR>
- * <BR>
- * <li>Get the text of the selected HTML file in function of the npcId and of the page number</li> <li>Send a Server->Client NpcHtmlMessage containing the text of the L2NpcInstance to the L2PcInstance</li> <li>Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the
- * client wait another packet</li><BR>
- * @param player The L2PcInstance that talk with the L2NpcInstance
- * @param npc L2Npc loto instance
- * @param val The number of the page of the L2NpcInstance to display
- */
- // 0 - first buy lottery ticket window
- // 1-20 - buttons
- // 21 - second buy lottery ticket window
- // 22 - selected ticket with 5 numbers
- // 23 - current lottery jackpot
- // 24 - Previous winning numbers/Prize claim
- // >24 - check lottery ticket by item object id
- public static final void showLotoWindow(L2PcInstance player, L2Npc npc, int val)
- {
- int npcId = npc.getTemplate().getId();
- String filename;
- SystemMessage sm;
- final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
-
- if (val == 0) // 0 - first buy lottery ticket window
- {
- filename = (npc.getHtmlPath(npcId, 1));
- html.setFile(player.getHtmlPrefix(), filename);
- }
- else if ((val >= 1) && (val <= 21)) // 1-20 - buttons, 21 - second buy lottery ticket window
- {
- if (!Lottery.getInstance().isStarted())
- {
- // tickets can't be sold
- player.sendPacket(SystemMessageId.NO_LOTTERY_TICKETS_CURRENT_SOLD);
- return;
- }
- if (!Lottery.getInstance().isSellableTickets())
- {
- // tickets can't be sold
- player.sendPacket(SystemMessageId.NO_LOTTERY_TICKETS_AVAILABLE);
- return;
- }
-
- filename = (npc.getHtmlPath(npcId, 5));
- html.setFile(player.getHtmlPrefix(), filename);
-
- int count = 0;
- int found = 0;
- // counting buttons and unsetting button if found
- for (int i = 0; i < 5; i++)
- {
- if (player.getLoto(i) == val)
- {
- // unsetting button
- player.setLoto(i, 0);
- found = 1;
- }
- else if (player.getLoto(i) > 0)
- {
- count++;
- }
- }
-
- // if not rearched limit 5 and not unseted value
- if ((count < 5) && (found == 0) && (val <= 20))
- {
- for (int i = 0; i < 5; i++)
- {
- if (player.getLoto(i) == 0)
- {
- player.setLoto(i, val);
- break;
- }
- }
- }
-
- // setting pusshed buttons
- count = 0;
- for (int i = 0; i < 5; i++)
- {
- if (player.getLoto(i) > 0)
- {
- count++;
- String button = String.valueOf(player.getLoto(i));
- if (player.getLoto(i) < 10)
- {
- button = "0" + button;
- }
- String search = "fore=\"L2UI.lottoNum" + button + "\" back=\"L2UI.lottoNum" + button + "a_check\"";
- String replace = "fore=\"L2UI.lottoNum" + button + "a_check\" back=\"L2UI.lottoNum" + button + "\"";
- html.replace(search, replace);
- }
- }
-
- if (count == 5)
- {
- String search = "0\">Return";
- String replace = "22\">Your lucky numbers have been selected above.";
- html.replace(search, replace);
- }
- }
- else if (val == 22) // 22 - selected ticket with 5 numbers
- {
- if (!Lottery.getInstance().isStarted())
- {
- // tickets can't be sold
- player.sendPacket(SystemMessageId.NO_LOTTERY_TICKETS_CURRENT_SOLD);
- return;
- }
- if (!Lottery.getInstance().isSellableTickets())
- {
- // tickets can't be sold
- player.sendPacket(SystemMessageId.NO_LOTTERY_TICKETS_AVAILABLE);
- return;
- }
-
- long price = Config.ALT_LOTTERY_TICKET_PRICE;
- int lotonumber = Lottery.getInstance().getId();
- int enchant = 0;
- int type2 = 0;
-
- for (int i = 0; i < 5; i++)
- {
- if (player.getLoto(i) == 0)
- {
- return;
- }
-
- if (player.getLoto(i) < 17)
- {
- enchant += Math.pow(2, player.getLoto(i) - 1);
- }
- else
- {
- type2 += Math.pow(2, player.getLoto(i) - 17);
- }
- }
- if (player.getAdena() < price)
- {
- sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA);
- player.sendPacket(sm);
- return;
- }
- if (!player.reduceAdena("Loto", price, npc, true))
- {
- return;
- }
- Lottery.getInstance().increasePrize(price);
-
- sm = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM_S1);
- sm.addItemName(4442);
- player.sendPacket(sm);
-
- L2ItemInstance item = new L2ItemInstance(IdFactory.getInstance().getNextId(), 4442);
- item.setCount(1);
- item.setCustomType1(lotonumber);
- item.setEnchantLevel(enchant);
- item.setCustomType2(type2);
- player.getInventory().addItem("Loto", item, player, npc);
-
- InventoryUpdate iu = new InventoryUpdate();
- iu.addItem(item);
- L2ItemInstance adenaupdate = player.getInventory().getItemByItemId(57);
- iu.addModifiedItem(adenaupdate);
- player.sendPacket(iu);
-
- filename = (npc.getHtmlPath(npcId, 6));
- html.setFile(player.getHtmlPrefix(), filename);
- }
- else if (val == 23) // 23 - current lottery jackpot
- {
- filename = (npc.getHtmlPath(npcId, 3));
- html.setFile(player.getHtmlPrefix(), filename);
- }
- else if (val == 24) // 24 - Previous winning numbers/Prize claim
- {
- filename = (npc.getHtmlPath(npcId, 4));
- html.setFile(player.getHtmlPrefix(), filename);
-
- int lotonumber = Lottery.getInstance().getId();
- String message = "";
- for (L2ItemInstance item : player.getInventory().getItems())
- {
- if (item == null)
- {
- continue;
- }
- if ((item.getId() == 4442) && (item.getCustomType1() < lotonumber))
- {
- message = message + "<a action=\"bypass -h npc_%objectId%_Loto " + item.getObjectId() + "\">" + item.getCustomType1() + " Event Number ";
- int[] numbers = Lottery.getInstance().decodeNumbers(item.getEnchantLevel(), item.getCustomType2());
- for (int i = 0; i < 5; i++)
- {
- message += numbers[i] + " ";
- }
- long[] check = Lottery.getInstance().checkTicket(item);
- if (check[0] > 0)
- {
- switch ((int) check[0])
- {
- case 1:
- message += "- 1st Prize";
- break;
- case 2:
- message += "- 2nd Prize";
- break;
- case 3:
- message += "- 3th Prize";
- break;
- case 4:
- message += "- 4th Prize";
- break;
- }
- message += " " + check[1] + "a.";
- }
- message += "</a><br>";
- }
- }
- if (message.isEmpty())
- {
- message += "There has been no winning lottery ticket.<br>";
- }
- html.replace("%result%", message);
- }
- else if (val == 25) // 25 - lottery instructions
- {
- filename = (npc.getHtmlPath(npcId, 2));
- html.setFile(player.getHtmlPrefix(), filename);
- }
- else if (val > 25) // >25 - check lottery ticket by item object id
- {
- int lotonumber = Lottery.getInstance().getId();
- L2ItemInstance item = player.getInventory().getItemByObjectId(val);
- if ((item == null) || (item.getId() != 4442) || (item.getCustomType1() >= lotonumber))
- {
- return;
- }
- long[] check = Lottery.getInstance().checkTicket(item);
-
- sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISAPPEARED);
- sm.addItemName(4442);
- player.sendPacket(sm);
-
- long adena = check[1];
- if (adena > 0)
- {
- player.addAdena("Loto", adena, npc, true);
- }
- player.destroyItem("Loto", item, npc, false);
- return;
- }
- html.replace("%objectId%", String.valueOf(npc.getObjectId()));
- html.replace("%race%", "" + Lottery.getInstance().getId());
- html.replace("%adena%", "" + Lottery.getInstance().getPrize());
- html.replace("%ticket_price%", "" + Config.ALT_LOTTERY_TICKET_PRICE);
- html.replace("%prize5%", "" + (Config.ALT_LOTTERY_5_NUMBER_RATE * 100));
- html.replace("%prize4%", "" + (Config.ALT_LOTTERY_4_NUMBER_RATE * 100));
- html.replace("%prize3%", "" + (Config.ALT_LOTTERY_3_NUMBER_RATE * 100));
- html.replace("%prize2%", "" + Config.ALT_LOTTERY_2_AND_1_NUMBER_PRIZE);
- html.replace("%enddate%", "" + DateFormat.getDateInstance().format(Lottery.getInstance().getEndDate()));
- player.sendPacket(html);
-
- // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- @Override
- public String[] getBypassList()
- {
- return COMMANDS;
- }
- }
|