Jump to content

Recommended Posts

Posted

Hello MxC users!

 

Sometime ago i published this mod in another L2j forum. And NOW, I am posting HERE!

It's a very simple code, because i'm still learning!

 

What is this?

- The AioBuffer Shop can sell AIO status by any items that the admin chooses.

 

How to Use?

- It's very simple! Just need edit the html file.

 

<button value="30 Days" action="bypass -h npc_%objectId%_add_aio $item_id $item_count $aio_time" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">

 

 

Just replace the tags with their respective values:

$item_id: ItemId needed
$item_count: Count of ItemId
$aio_time: Time of AIO Status

 

Appearance

- The current HTML NPC can be seen in the following image:

 

RdZUW.jpg

 

You must edit in data/html/mods/Aio Shop/start.htm file;

 

And finally the code:

Index: data/html/mods/Aio Shop/start.htm
===================================================================
--- data/html/mods/Aio Shop/start.htm   (revision 0)
+++ data/html/mods/Aio Shop/start.htm   (working copy)
@@ -0,0 +1,36 @@
+<html>
+   <title>Aio Shop</title>
+   <body>
+      <br>
+      <center><img src=L2UI.SquareWhite width=276 height=1></center>
+      <center>
+         <table width=256>
+            <tr>
+               <td><img src=L2UI.GM_Icon width=32 height=32></td>
+               <td width=192 align=center>
+                  <font color="LEVEL">%servername%</font><br1>Bem Vindo ao Aio Shop!
+               </td>
+               <td><img src=L2UI.GM_Icon width=32 height=32></td>
+            </tr>
+         </table>
+      </center>
+      <br>
+      <center><img src=L2UI.SquareWhite width=276 height=1></center>
+      <br>
+      <center>
+         <font color=99FF66>Quando voce faz um AIO, seu personagem nao<br1>
+         podera dar hits ou usar skills fora da cidade.</font><br1>
+         <font color=FF0055>Use um personagem alternativo para isso!</font><br>
+         <img src=L2UI_CH3.herotower_deco width=256 height=32><br>
+         <font color=FF9900>Os precos dos pacotes de dias sao em<br1>
+         "Gold Bar" e os dias sao cumulativos.</font><br>
+         <button value="30 Dias [10 GB]" action="bypass -h npc_%objectId%_add_aio 3470 10 30" width=100 height=15 back="sek.cbui94" fore="sek.cbui92"><br>
+         <button value="60 Dias [20 GB]" action="bypass -h npc_%objectId%_add_aio 3470 20 60" width=100 height=15 back="sek.cbui94" fore="sek.cbui92"><br>
+         <button value="180 Dias [40 GB]" action="bypass -h npc_%objectId%_add_aio 3470 40 180" width=100 height=15 back="sek.cbui94" fore="sek.cbui92"><br>
+         <button value="365 Dias [80 GB]" action="bypass -h npc_%objectId%_add_aio 3470 80 365" width=100 height=15 back="sek.cbui94" fore="sek.cbui92"><br>
+         <font color=0099FF>Se voce clicar em "Remover AIO" seu status AIO<br1>
+         sera removido e voce perdera os creditos restantes.</font>
+         <button value="Remover Aio" action="bypass -h npc_%objectId%_remove_aio" width=100 height=15 back="sek.cbui94" fore="sek.cbui92"><br>
+      </center>
+   </body>
+</html>
#P L2jFrozen_GameServer
Index: head-src/com/l2jfrozen/Config.java
===================================================================
--- head-src/com/l2jfrozen/Config.java   (revision 972)
+++ head-src/com/l2jfrozen/Config.java   (working copy)
@@ -572,6 +572,8 @@
    public static int AIO_TCOLOR;
    public static boolean ALLOW_AIO_USE_GK;
    public static boolean ALLOW_AIO_USE_CM;
+   public static int DUAL_AIO_ID;
+
    public static boolean ANNOUNCE_CASTLE_LORDS;
    
    /** Configuration to allow custom items to be given on character creation */
@@ -672,6 +674,8 @@
            AIO_TCOLOR = Integer.decode("0x" + otherSettings.getProperty("AioTitleColor", "88AA88"));
            ALLOW_AIO_USE_GK = Boolean.parseBoolean(otherSettings.getProperty("AllowAioUseGk", "False"));
            ALLOW_AIO_USE_CM = Boolean.parseBoolean(otherSettings.getProperty("AllowAioUseClassMaster", "False"));
+           DUAL_AIO_ID = Integer.parseInt(otherSettings.getProperty("DualAioItemId", "6580"));
+
            ANNOUNCE_CASTLE_LORDS = Boolean.parseBoolean(otherSettings.getProperty("AnnounceCastleLords", "False"));
            if(ENABLE_AIO_SYSTEM) //create map if system is enabled
            {
Index: head-src/com/l2jfrozen/gameserver/model/actor/instance/L2AioSellerInstance.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2AioSellerInstance.java   (revision 0)
+++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2AioSellerInstance.java   (working copy)
@@ -0,0 +1,227 @@
+/* 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 2, 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+package com.l2jfrozen.gameserver.model.actor.instance;
+
+import java.util.StringTokenizer;
+
+import com.l2jfrozen.Config;
+import com.l2jfrozen.gameserver.ai.CtrlIntention;
+import com.l2jfrozen.gameserver.network.SystemMessageId;
+import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
+import com.l2jfrozen.gameserver.network.serverpackets.EtcStatusUpdate;
+import com.l2jfrozen.gameserver.network.serverpackets.InventoryUpdate;
+import com.l2jfrozen.gameserver.network.serverpackets.MyTargetSelected;
+import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
+import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
+import com.l2jfrozen.gameserver.network.serverpackets.ValidateLocation;
+import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
+
+/**
+ * Aio Shop e um re-make do Mod Aio Seller. De uma versao para outra, muitas coisas mudaram e isto altera o modo de usar do mod por completo!
+ * Agora e possivel alterar a template, o item, o preco e o tempo via html. Em resumo, esta nova versao do codigo esta bem mais flexivel.
+ * Faca um bom uso! 
+ * @author RedHoT
+ * @version 1.0.7
+ */
+public class L2AioSellerInstance extends L2FolkInstance
+{
+   public L2AioSellerInstance(int objectId, L2NpcTemplate template)
+   {
+      super(objectId, template);
+   }
+
+   @Override
+   public void onAction(L2PcInstance player)
+   {
+      if (!canTarget(player))
+         return;
+
+      player.setLastFolkNPC(this);
+
+      // Check if the L2PcInstance already target the L2NpcInstance
+      if (this != player.getTarget())
+      {
+         // Set the target of the L2PcInstance player
+         player.setTarget(this);
+
+         // Send a Server->Client packet MyTargetSelected to the L2PcInstance player
+         MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);
+         player.sendPacket(my);
+         my = null;
+
+         // Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
+         player.sendPacket(new ValidateLocation(this));
+      }
+      else
+      {
+         // Calculate the distance between the L2PcInstance and the L2NpcInstance
+         if (!canInteract(player))
+         {
+            // Notify the L2PcInstance AI with AI_INTENTION_INTERACT
+            player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
+         }
+         else
+         {
+            showMessageWindow(player);
+         }
+      }
+      // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
+      player.sendPacket(ActionFailed.STATIC_PACKET);
+   }
+
+   private void showMessageWindow(L2PcInstance player)
+   {
+      String filename = "data/html/mods/Aio Shop/start.htm";
+
+      NpcHtmlMessage html = new NpcHtmlMessage(1);
+      html.setFile(filename);
+      html.replace("%objectId%", String.valueOf(getObjectId()));
+      html.replace("%servername%", Config.ALT_Server_Name);
+      player.sendPacket(html);
+      filename = null;
+      html = null;
+   }
+
+   @Override
+   public void onBypassFeedback(L2PcInstance player, String command)
+   {
+      if (command.startsWith("add_aio"))
+      {
+         StringTokenizer st = new StringTokenizer(command);
+         st.nextToken();
+
+         String priceId = null, priceCount = null, time = null;
+         int aioPriceId = 0, aioPriceCount = 0, aioTime = 0; 
+
+         if (st.hasMoreTokens())
+         {
+            priceId = st.nextToken();
+            priceCount = st.nextToken();
+            time = st.nextToken();
+
+            try
+            {
+               aioPriceId = Integer.parseInt(priceId);
+               aioPriceCount = Integer.parseInt(priceCount);
+               aioTime = Integer.parseInt(time);
+            }
+            catch(NumberFormatException e) {}
+         }
+         else
+         {
+            _log.warning("Could not update aio status of player " + player.getName());
+            return;
+         }
+
+         makeAioCharacter(player, aioPriceId, aioPriceCount, aioTime);
+      }
+      else if (command.startsWith("remove_aio"))
+         removeAio(player);
+
+      showMessageWindow(player);
+   }
+
+   
+   public void makeAioCharacter(L2PcInstance player, int itemId, int itemCount, int aioTime)
+   {
+      L2ItemInstance itemInstance = player.getInventory().getItemByItemId(itemId);
+
+      if (itemInstance == null || !itemInstance.isStackable() && player.getInventory().getInventoryItemCount(itemId, -1) < (itemCount))
+      {
+            player.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
+         return;
+      }
+      else if (itemInstance.isStackable())
+      {
+         if (!player.destroyItemByItemId("Aio", itemId, itemCount, player.getTarget(), true))
+         {
+                player.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
+            return;
+         }
+      }
+      else
+         for (int i = 0; i < (itemCount); i++)
+            player.destroyItemByItemId("Aio", itemId, 1, player.getTarget(), true);
+
+      doAio(player, aioTime);
+   }
+   public void doAio(L2PcInstance player, int days)
+   {
+      if(player == null)
+         return;
+
+        int daysLeft = player.getAioEndTime() <= 0 ? 0 : (int) ((player.getAioEndTime() - System.currentTimeMillis()) / 86400000);
+      player.setAio(true);
+      player.setEndTime("aio", days + daysLeft);
+
+      player.getStat().addExp(player.getStat().getExpForLevel(81));
+
+      if(Config.ALLOW_AIO_NCOLOR && player.isAio())
+         player.getAppearance().setNameColor(Config.AIO_NCOLOR);
+
+      if(Config.ALLOW_AIO_TCOLOR && player.isAio())
+         player.getAppearance().setTitleColor(Config.AIO_TCOLOR);
+
+      /* Give Aio Dual */
+      L2ItemInstance item;
+      if(player.getInventory().getItemByItemId(Config.DUAL_AIO_ID) == null)
+      {
+         item = player.getInventory().addItem("", Config.DUAL_AIO_ID, 1, player, null);
+         InventoryUpdate iu = new InventoryUpdate();
+         iu.addItem(item);
+         player.sendPacket(iu);
+      }
+
+      player.rewardAioSkills();
+      player.sendPacket(new EtcStatusUpdate(player));
+      player.sendSkillList();
+      player.broadcastUserInfo();
+
+      player.sendMessage("You are now an Aio, Congratulations!");
+   }
+
+   public void removeAio(L2PcInstance player)
+   {
+      if(!player.isAio())
+      {
+         player.sendMessage("You are not an AIO.");
+         return;
+      }
+
+      player.setAio(false);
+      player.setAioEndTime(0);
+
+      player.getAppearance().setNameColor(0xFFFFFF);
+      player.getAppearance().setTitleColor(0xFFFF77);
+
+      /* Remove Aio Dual */
+      L2ItemInstance item;
+      player.getWarehouse().destroyItemByItemId("", Config.DUAL_AIO_ID, 1, player, null);
+      item = player.getInventory().destroyItemByItemId("", Config.DUAL_AIO_ID, 1, player, null);
+      InventoryUpdate iu = new InventoryUpdate();
+      iu.addItem(item);
+      player.sendPacket(iu);
+            
+      player.lostAioSkills();
+      player.sendPacket(new EtcStatusUpdate(player));
+      player.sendSkillList();
+      player.broadcastUserInfo();
+
+      player.sendMessage("Now You are not an Aio..");
+   }
+}
Index: config/head/other.properties
===================================================================
--- config/head/other.properties   (revision 972)
+++ config/head/other.properties   (working copy)
@@ -225,6 +225,9 @@
# Aio Buffers can speak to Class Master?
AllowAioUseClassMaster = False

+# ID Item for Reward AIO's in Transformation
+DualAioItemId = 6580
+
# Announce castle lords on enter game. default = false 
AnnounceCastleLords = False

 

 

SQL:

INSERT INTO `custom_npc` VALUES ('100', '14207', 'Mr. Catra', '1', 'Aio Shop', '1', 'Monster.silver_cat', '7.00', '15.00', '42', 'male', 'L2AioSeller', '40', '2008', '679', '9.09', '2.14', '40', '43', '30', '21', '20', '25', '0', '0', '413', '236', '152', '221', '278', '0', '333', '0', '0', '0', '52', '198', 'NULL', '0', '0', '0', 'LAST_HIT');

 

Pastebin

 

Sorry My English! It's Google Destroyer Traslator

  • 2 weeks later...
  • 2 weeks later...
Guest
This topic is now closed to further replies.


  • Posts

    • Connect to the server you need to >>>download<<< game client launch from /system_en/. Login server setup on auto registration, admin rights in game by default . Or you can use a patch specifying the l2.ini Connect to address classic.lucera2.com if you already have a game client Download updated patch All major/minor subsystems operate in a proper view. Absolutely ready to combat the server.
    • Connect to the server you need to >>>download<<< a game client launch from /system_en/. Login server setup on auto registration, admin rights in game by default . Or you can use a patch specifying the l2.ini Connect to address auth.lucera2.com All major/minor subsystems operate in a proper view. Absolutely ready to combat the server. From what remains - to sharpen the skills, which will be ready within a week (on the classic client it is not at all)
    • in terms of "Java" even this comment can be copied and presented as l2gold related pack   in terms of "l2off" real l2gold copies very few, actual live servers can be counted in 1 hand   Q:Why is it that no one can gather a team of at least 10 people because you need 10 experienced people, each has their own life, commitments and finally different views of how that server should actually work because all of them would expect something ($$$$) in return for their suposed involvement and such projects dont even go out of development.   ps let me know who you would trust to do this i dare you name 3 only people not 10.     finally i keep the copyrights for this post from becoming an l2gold server  
    • Buy Lucera2 Fully automated payment system, after payment you instantly get access to the product and repository   Product info: Detailed info Test servers: Interlude, Classic, Legacy, Multiprotocol Product costs $120 with a lifetime license. The monthly fee provides optional access to updates and tech support, costing $20. Server minimum requirements Product files repository accessible upon acquisition. Currently, lucera2 development is the best server market implementation of chronicles!   If you have questions, Don't worry and ask you convenient/contact via: Teams :  deazertir Telegram: https://t.me/lucera2 Facebook: https://m.me/Lucera2Dev Discord: Lucera2
    • WE HAVE VERY BIG DISCOUNTS ON ADEN, ITEMS, AND ACCOUNTS!!! HURRY TO BUY!!! DISCORD - GODDARDSHOP TELEGRAM - MMOPROMO
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock