Jump to content

Recommended Posts

Posted (edited)

 

model/actor/instance

new file

package com.l2jfrozen.gameserver.model.actor.instance;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import javolution.text.TextBuilder;

import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.ai.CtrlIntention;
import com.l2jfrozen.gameserver.communitybbs.Manager.RegionBBSManager;
import com.l2jfrozen.gameserver.datatables.sql.CharNameTable;
import com.l2jfrozen.gameserver.datatables.sql.ClanTable;
import com.l2jfrozen.gameserver.model.Inventory;
import com.l2jfrozen.gameserver.model.L2World;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.LeaveWorld;
import com.l2jfrozen.gameserver.network.serverpackets.MagicSkillUser;
import com.l2jfrozen.gameserver.network.serverpackets.MyTargetSelected;
import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jfrozen.gameserver.network.serverpackets.PartySmallWindowAll;
import com.l2jfrozen.gameserver.network.serverpackets.PartySmallWindowDeleteAll;
import com.l2jfrozen.gameserver.network.serverpackets.PledgeShowMemberListAll;
import com.l2jfrozen.gameserver.network.serverpackets.PledgeShowMemberListUpdate;
import com.l2jfrozen.gameserver.network.serverpackets.SocialAction;
import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
import com.l2jfrozen.gameserver.network.serverpackets.ValidateLocation;
import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
import com.l2jfrozen.gameserver.util.Util;
import com.l2jfrozen.util.CloseUtil;
import com.l2jfrozen.util.database.L2DatabaseFactory;


public class L2te0xServiceNpcInstance extends L2NpcInstance
{
private final static int ITEM_ID = 9989;
String INSERT_DATA = "REPLACE INTO characters_custom_data (obj_Id, char_name, hero, noble, donator, hero_end_date) VALUES (?,?,?,?,?,?)";
String INSERT_DATAA = "REPLACE INTO characters_custom_data (obj_Id, char_name, hero, noble, donator) VALUES (?,?,?,?,?)";

public L2te0xServiceNpcInstance(int objectId, L2NpcTemplate template)
{
super(objectId, template);
}

@Override
     public void onBypassFeedback(L2PcInstance player, String command)
     {


if (player == null)
{
return;
}
             else if (command.startsWith("active"))
             {
              showActiveWindow(player, 0);
             }
             else if (command.startsWith("passive"))
             {
              showPassiveWindow(player, 0);
             }
             else if (command.startsWith("back"))
             {
              showChatWindow(player, 0);
             }
             else if (command.startsWith("Refresh"))
             {
              addAugment(player, 16287, 3202, 3);
             }
             else if (command.startsWith("Ritual"))
             {
              addAugment(player, 16183, 3130, 10);
             }
             else if (command.startsWith("Heal"))
             {
              addAugment(player, 16195, 3123, 10);
             }
             else if (command.startsWith("Recharge"))
             {
              addAugment(player, 16204, 3127, 10);
             }
             else if (command.startsWith("Cheer"))
             {
              addAugment(player, 16197, 3131, 10);
             }
             else if (command.startsWith("Celestial"))
             {
              addAugment(player, 15047, 3158, 1);
             }
             else if (command.startsWith("BlessedSoul"))
             {
              addAugment(player, 16200, 3128, 10);
             }
             else if (command.startsWith("BlessedBody"))
             {
              addAugment(player, 16199, 3124, 10);
             }
             else if (command.startsWith("Empower"))
             {
              addAugment(player, 16281, 3241, 10);
             }
             else if (command.startsWith("MagicBarrier"))
             {
              addAugment(player, 16282, 3245, 10);
             }
             else if (command.startsWith("Might"))
             {
              addAugment(player, 16283, 3240, 10);
             }
             else if (command.startsWith("Shield"))
             {
              addAugment(player, 16284, 3244, 10);
             }
             else if (command.startsWith("DuelMight"))
             {
              addAugment(player, 16285, 3243, 10);
             }
             else if (command.startsWith("Focus"))
             {
              addAugment(player, 16333, 3249, 10);
             }
             else if (command.startsWith("WildMagic"))
             {
              addAugment(player, 16336, 3250, 10);
             }
             else if (command.startsWith("Agility"))
             {
              addAugment(player, 16332, 3247, 10);
             }
             else if (command.startsWith("Guidance"))
             {
              addAugment(player, 16335, 3248, 10);
             }
             else if (command.startsWith("changeName2"))
             {
              showNameWindow(player, 0);
             }
             else if (command.startsWith("changeClanName2"))
             {
              showClanNameWindow(player, 0);
             }
             else if (command.startsWith("changeName"))
             {
              String _name = command.substring(11);
                 String errorMsg = null;
                 boolean proceed = true;
                 if (_name.length() < 3)
                 {
                   errorMsg = "Names have to be at least 3 characters";
                   proceed = false;
                   showNameWindow(player, 0);
                 }
                 if (_name.length() > 16)
                 {
                   errorMsg = "Names cannot be longer than 16 characters";
                   proceed = false;
                   showNameWindow(player, 0);
                 }
                 if ((!Util.isAlphaNumeric(_name)) || (!isValidName(_name)))
                 {
                   errorMsg = "Invalid name";
                   proceed = false;
                   showNameWindow(player, 0);
                 }
                 if (CharNameTable.getInstance().doesCharNameExist(_name)) {
                     if ((!player.getName().equalsIgnoreCase(_name)) || (player.getName().equals(_name)))
                     {
                       errorMsg = "Name already exists";
                       proceed = false;
                       showNameWindow(player, 0);
                     }
                   }
                 if (!proceed)
                 {
                   player.sendMessage(errorMsg);
                   showNameWindow(player, 0);
                   return;
                 }
                 if (player.destroyItemByItemId("Consume", ITEM_ID, 10, player, true))
                 {
                      try (Connection con = L2DatabaseFactory.getInstance().getConnection();
                        PreparedStatement statement = con.prepareStatement("UPDATE characters SET char_name=? WHERE obj_Id=?"))
                       {
                        statement.setString(1, _name);
                        statement.setInt(2, player.getObjectId());
                        statement.execute();
                        statement.close();
                       }
                       catch (Exception e)
                       {
                        LOGGER.info("Error updating name for player " + player.getName() + ". Error: " + e);
                       }
  L2World.getInstance().removeFromAllPlayers(player);
player.setName(_name);
player.store();
L2World.getInstance().addToAllPlayers(player);
                    player.sendMessage("Your new character name is " + _name);
                    player.broadcastUserInfo();
                   player.sendMessage("Thank you for helping our server!");
if (player.isInParty())
{
// Delete party window for other party members
player.getParty().broadcastToPartyMembers(player, new PartySmallWindowDeleteAll());
for (final L2PcInstance member : player.getParty().getPartyMembers())
{
// And re-add
if (member != player)
{
member.sendPacket(new PartySmallWindowAll(player, player.getParty()));
}
}
}

if (player.getClan() != null)
{
player.getClan().updateClanMember(player);
player.getClan().broadcastToOnlineMembers(new PledgeShowMemberListUpdate(player));
player.sendPacket(new PledgeShowMemberListAll(player.getClan(), player));
}

RegionBBSManager.getInstance().changeCommunityBoard();
                 }
             }
             else if (command.startsWith("changeClanName"))
             {
              String _name = command.substring(15);
                 String errorMsg = null;
                 boolean proceed = true;
                 if (_name.length() < 2)
                 {
                   errorMsg = "Clan Names have to be at least 2 characters";
                   proceed = false;
                   showClanNameWindow(player, 0);
                 }
                 if (_name.length() > 16)
                 {
                   errorMsg = "Clan Names cannot be longer than 16 characters";
                   proceed = false;
                   showClanNameWindow(player, 0);
                 }
                 if ((!Util.isAlphaNumeric(_name)) || (!isValidClanName(_name)))
                 {
                   errorMsg = "Invalid name";
                   proceed = false;
                   showClanNameWindow(player, 0);
                 }
          if (ClanTable.getClanByName(_name) != null)
         {
          errorMsg = "Name already exists";
          proceed = false;
          showClanNameWindow(player, 0);
         }
                 if (!proceed)
                 {
                   player.sendMessage(errorMsg);
                   showClanNameWindow(player, 0);
                   return;
                 }
                 if (player.destroyItemByItemId("Consume", ITEM_ID, 10, player, true))
                 {
                      try (Connection con = L2DatabaseFactory.getInstance().getConnection();
                        PreparedStatement statement = con.prepareStatement("UPDATE clan_data SET clan_name=? WHERE clan_id=?"))
                       {
                        statement.setString(1, _name);
                        statement.setInt(2, player.getClan().getClanId());
                        statement.execute();
                        statement.close();
                       }
                       catch (Exception e)
                       {
                        LOGGER.info("Error updating clan name for player " + player.getName() + ". Error: " + e);
                       }
player.getClan().setName(_name);
                    player.sendMessage("Your new clan name is " + _name);
                    player.sendMessage("Thank you for helping our server!");
                    player.getClan().broadcastClanStatus();
                 }
             }
             else if (command.startsWith("setNoble"))
          {
              if (!player.isNoble())
              {
       if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) >= 10)
       {
                   player.destroyItemByItemId("Consume", ITEM_ID, 10, player, true);
                   player.getInventory().addItem("Tiara", 7694, 1, player, null);
                      player.setNoble(true);
                      player.setTarget(player);
                      player.broadcastPacket(new MagicSkillUser(player, 5103, 1, 1000, 0));
                      player.broadcastUserInfo();
                      player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
                      player.sendMessage("The greatest soul of the Flame of Splendor Barakiel is now following your spirit by gifting you the Noblesse status. Status that only a few true Semi-Gods can have.");
                  }
                  else
                  {
                   player.sendMessage("You don't have enough items.");
                  }
              }
              else
              {
               player.sendMessage("The greatest soul of the Flame of Splendor Barakiel is already following your spirit and gifting it with the Noblesse status.");
              }
          }
             else if (command.startsWith("setDonator"))
          {
              if (!player.isDonator())
              {
       if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) >= 7)
       {
                   player.destroyItemByItemId("Consume", ITEM_ID, 1, player, true);
                      player.setDonator(true);
                      player.setTarget(player);
                      updateDatabasex(player, true);
                      player.broadcastPacket(new MagicSkillUser(player, 5103, 1, 1000, 0));
                      player.broadcastUserInfo();
                      player.sendMessage("You are gifted with the Donator status. Thank you for being a helpful player on our server!");
                  }
                  else
                  {
                   player.sendMessage("You don't have enough items.");
                  }
              }
              else
              {
               player.sendMessage("You already own Donator status.");
              }
          }
             else if (command.startsWith("reducePks2"))
             {
              showPksWindow(player, 0);
             }
             else if (command.startsWith("reducePks"))
             {
                 try
                 {
                     String pkReduceString = command.substring(10);
                     int pkReduceCount = Integer.parseInt(pkReduceString);
                     
                     if (player.getPkKills() != 0)
                     {
                         if (pkReduceCount == 0)
                         {
                             player.sendMessage("Please, put a higher value.");
                             showPksWindow(player, 0);
                         }
                         else
                         {
                if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) >= 1)
               {
                                 player.destroyItemByItemId("Consume", ITEM_ID, 1 * pkReduceCount, player, true);
                                 player.setPkKills(player.getPkKills() - pkReduceCount);
                                 player.sendMessage("You have successfuly cleaned " + pkReduceCount + " PKs.");
                                 player.broadcastUserInfo();
                             }
                             else
                             {
                              player.sendMessage("Not enough items.");
                             }
                         }
                     }
                     else
                     {
                      player.sendMessage("Not enough PKs.");
                     }
                 }
                 catch (Exception e)
                 {
                     player.sendMessage("Incorrect value. Please try again.");
                     showPksWindow(player, 0);
                 }
             }
             else if (command.startsWith("levelUpClan"))
             {
              if (!player.isClanLeader())
             {
              player.sendMessage("You must be a clan leader in order to use this service.");
             }
             else
             {
             if (player.getClan().getLevel() == 8)
             {
             player.sendMessage("Your clan is already level 8.");
             }
             else
             {
             if (((player.getClan().getLevel() <= 1) || (player.getClan().getLevel() == 2) || (player.getClan().getLevel() == 3) || (player.getClan().getLevel() == 4)))
             {
                 player.getClan().setLevel(player.getClan().getLevel() + 1);
                 player.getClan().broadcastClanStatus();
                 player.sendMessage("Your clan is now level " + player.getClan().getLevel() + ".");
                            player.setTarget(player);
                            player.broadcastPacket(new MagicSkillUser(player, 5103, 1, 1000, 0));
     int newCLanLevel = player.getClan().getLevel() +1;
     LOGGER.info("Updating clan ID " + player.getClan().getClanId() +" to level " + newCLanLevel + " for player " + player.getName() + ".");
     try (Connection con = L2DatabaseFactory.getInstance().getConnection();
     PreparedStatement statement = con.prepareStatement("UPDATE clan_data SET clan_level=? WHERE clan_id=?"))
     {
     statement.setInt(1, player.getClan().getLevel());
     statement.setInt(2, player.getClan().getClanId());
     statement.execute();
     statement.close();
     }
     catch (Exception e)
     {
     LOGGER.info("Error updating clan level for player " + player.getName() + ". Error: " + e);
     }
     player.sendMessage("Your clan level have been increased successfully.");
             }
             else if (player.getClan().getLevel() == 5)
             {
              if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) >= 10)
              {
              player.destroyItemByItemId("Consume", ITEM_ID, 10, player, true);
                 player.getClan().setLevel(player.getClan().getLevel() + 1);
                 player.getClan().broadcastClanStatus();
                     player.sendMessage("Your clan is now level " + player.getClan().getLevel() + ".");
                                player.setTarget(player);
                                player.broadcastPacket(new MagicSkillUser(player, 5103, 1, 1000, 0));
     int newCLanLevel = player.getClan().getLevel() +1;
     LOGGER.info("Updating clan ID " + player.getClan().getClanId() +" to level " + newCLanLevel + " for player " + player.getName() + ".");
     try (Connection con = L2DatabaseFactory.getInstance().getConnection();
     PreparedStatement statement = con.prepareStatement("UPDATE clan_data SET clan_level=? WHERE clan_id=?"))
     {
     statement.setInt(1, player.getClan().getLevel());
     statement.setInt(2, player.getClan().getClanId());
     statement.execute();
     statement.close();
     }
     catch (Exception e)
     {
     LOGGER.info("Error updating clan level for player " + player.getName() + ". Error: " + e);
     }
     player.sendMessage("Your clan level have been increased successfully.");
             }
             else
             {
             player.sendMessage("Not enough items.");
             }
             }
             else if (player.getClan().getLevel() == 6)
             {
              if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) >= 10)
              {
              player.destroyItemByItemId("Consume", ITEM_ID, 10, player, true);
                 player.getClan().setLevel(player.getClan().getLevel() + 1);
                 player.getClan().broadcastClanStatus();
                     player.sendMessage("Your clan is now level " + player.getClan().getLevel() + ".");
                                player.setTarget(player);
                                player.broadcastPacket(new MagicSkillUser(player, 5103, 1, 1000, 0));
     int newCLanLevel = player.getClan().getLevel() +1;
     LOGGER.info("Updating clan ID " + player.getClan().getClanId() +" to level " + newCLanLevel + " for player " + player.getName() + ".");
     try (Connection con = L2DatabaseFactory.getInstance().getConnection();
     PreparedStatement statement = con.prepareStatement("UPDATE clan_data SET clan_level=? WHERE clan_id=?"))
     {
     statement.setInt(1, player.getClan().getLevel());
     statement.setInt(2, player.getClan().getClanId());
     statement.execute();
     statement.close();
     }
     catch (Exception e)
     {
     LOGGER.info("Error updating clan level for player " + player.getName() + ". Error: " + e);
     }
     player.sendMessage("Your clan level have been increased successfully.");
             }
             else
             {
             player.sendMessage("Not enough items.");
             }
             }
             else if (player.getClan().getLevel() == 7)
             {
              if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) >= 10)
              {
              player.destroyItemByItemId("Consume", ITEM_ID, 10, player, true);
                 player.getClan().setLevel(player.getClan().getLevel() + 1);
                 player.getClan().broadcastClanStatus();
                     player.sendMessage("Your clan is now level " + player.getClan().getLevel() + ".");
                                player.setTarget(player);
                                player.broadcastPacket(new MagicSkillUser(player, 5103, 1, 1000, 0));
     int newCLanLevel = player.getClan().getLevel() +1;
     LOGGER.info("Updating clan ID " + player.getClan().getClanId() +" to level " + newCLanLevel + " for player " + player.getName() + ".");
     try (Connection con = L2DatabaseFactory.getInstance().getConnection();
     PreparedStatement statement = con.prepareStatement("UPDATE clan_data SET clan_level=? WHERE clan_id=?"))
     {
     statement.setInt(1, player.getClan().getLevel());
     statement.setInt(2, player.getClan().getClanId());
     statement.execute();
     statement.close();
     }
     catch (Exception e)
     {
     LOGGER.info("Error updating clan level for player " + player.getName() + ". Error: " + e);
     }
     player.sendMessage("Your clan level have been increased successfully.");
             }
             else
             {
             player.sendMessage("Not enough items.");
             }
             }
             player.getClan().broadcastClanStatus();
             }
             }
            }
             else if (command.startsWith("changeGender"))
             {
    if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) >= 5)
    {
     player.getAppearance().setSex(player.getAppearance().getSex() ? false : true);
                    player.setTarget(player);
                    player.broadcastPacket(new MagicSkillUser(player, 5103, 1, 1000, 0));
                 player.destroyItemByItemId("Consume", ITEM_ID, 10, player, true);
     L2PcInstance.setSexDB(player, 1);
     player.sendMessage("You have successfully changed your sex.");
     player.decayMe();
     player.spawnMe(player.getX(), player.getY(), player.getZ());
     player.broadcastUserInfo();
             }
               else
               {
                player.sendMessage("You don't have enough items.");
               }
             }
             else if (command.startsWith("hero"))
     {
              if (!player.isHero())
              {
       if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) >= 10)
       {
     player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
     player.setHero(true);
     updateDatabase(player, 1 * 24L * 60L * 60L * 1000L);
     player.sendMessage("You have been hero for 1 day. Have a nice time!");
     player.broadcastUserInfo();
     player.destroyItemByItemId("Consume", ITEM_ID, 10, player, true);
     }
               else
               {
                player.sendMessage("You don't have enough items.");
               }
           }
           else
           {
            player.sendMessage("You already are a hero.");
           }
     }
     }


@Override
public void onAction(L2PcInstance player)
{
if (this != player.getTarget())
{
player.setTarget(this);

player.sendPacket(new MyTargetSelected(getObjectId(), 0));

player.sendPacket(new ValidateLocation(this));
}
else if (!canInteract(player))
{
player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
}
else
{
showChatWindow(player, 0);
}
// 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 void showChatWindow(L2PcInstance player, int val)
        {
                TextBuilder tb = new TextBuilder();
         tb.append("<html><head><title>Lineage II Addicted - Donate Panel</title></head><body>");
         tb.append("<center><img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<table bgcolor=000000 width=300 height=40>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"666666\">Welcome " + player.getName() +" in Lineage II</font><font color=\"FF9900\"> -Addicted-</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<br>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("<center>");
         tb.append("<table bgcolor=000000 width=300 height=12>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"FF0000\">{Donate Panel}</font></td>");
         tb.append("</tr>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"666666\">Help us to improve our server by donating!</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<br>");
         tb.append("<center>");
         tb.append("<table>");
         tb.append("<tr><td align=center><font color=\"FF9900\"><a action=\"bypass -h npc_%objectId%_active\">Active Augment (20 Donate coins)</a></font></td></tr>");
         tb.append("<tr><td align=center><font color=\"FF9900\"><a action=\"bypass -h npc_%objectId%_passive\">Passive Augment (20 Donate coins)</a></font></td></tr>");
         tb.append("<tr><td align=center><font color=\"FF9900\"><a action=\"bypass -h npc_%objectId%_hero\">Become Hero 24h (20 Donate coins)</a></font></td></tr>");
         tb.append("<tr><td align=center><font color=\"FF9900\"><a action=\"bypass -h npc_%objectId%_setNoble\">Become Noblesse (10 Donate coins)</a></font></td></tr>");
         tb.append("<tr><td align=center><font color=\"FF9900\"><a action=\"bypass -h npc_%objectId%_setDonator\">Become Donator (50 Donate coins)</a></font></td></tr>");
         tb.append("<tr><td align=center><font color=\"FF9900\"><a action=\"bypass -h npc_%objectId%_changeName2\">Change Name (10 Donate coins)</a></font></td></tr>");
         tb.append("<tr><td align=center><font color=\"FF9900\"><a action=\"bypass -h npc_%objectId%_changeGender\">Change Sex (10 Donate coins)</a></font></td></tr>");
         tb.append("<tr><td align=center><font color=\"FF9900\"><a action=\"bypass -h npc_%objectId%_reducePks2\">Remove Pks (1 pk = 1 Donate coin)</a></font></td></tr>");
         tb.append("<tr><td align=center><font color=\"FF9900\"><a action=\"bypass -h npc_%objectId%_changeClanName2\">Change Clan Name (10 Donate coins)</a></font></td></tr>");
         tb.append("<tr><td align=center><font color=\"FF9900\"><a action=\"bypass -h npc_%objectId%_levelUpClan\">Clan level up (10 Donate coins per lvl)</a></font></td></tr>");
         tb.append("</table>");
         tb.append("<br>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<table border=0 bgcolor=000000 width=300 height=20>");
         tb.append("<tr>");
         tb.append("<td align=\"center\" width=\"300\"><font color=\"666666\">Vote for us :</font><font color=\"FF5555\"> www.l2addicted.eu</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("</body></html>");
               
                NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
                msg.setHtml(tb.toString());
                msg.replace("%objectId%", String.valueOf(this.getObjectId()));
       
                player.sendPacket(msg);
        }
   
  
   public void showActiveWindow(L2PcInstance player, int val)
        {
                TextBuilder tb = new TextBuilder();
                
         tb.append("<html><head><title>Lineage II Addicted - Active Augment</title></head><body>");
         tb.append("<center><img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("<center>");
         tb.append("<table bgcolor=000000 width=300 height=12>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"FF0000\">{Remove Pks}</font></td>");
         tb.append("</tr>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"666666\">Add a passive skill for 10 donate coins.</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<br>");
         tb.append("<center>");
         tb.append("<button value=\"Celestial\" action=\"bypass -h npc_%objectId%_Celestial\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");
                tb.append("<button value=\"Refresh\" action=\"bypass -h npc_%objectId%_Refresh\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");
                tb.append("<button value=\"Ritual\" action=\"bypass -h npc_%objectId%_Ritual\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");        
                tb.append("<button value=\"Heal\" action=\"bypass -h npc_%objectId%_Heal\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");      
                tb.append("<button value=\"Recharge\" action=\"bypass -h npc_%objectId%_Recharge\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");  
                tb.append("<button value=\"Cheer\" action=\"bypass -h npc_%objectId%_Cheer\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");  
                tb.append("<button value=\"Blessed Soul\" action=\"bypass -h npc_%objectId%_BlessedSoul\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");  
                tb.append("<button value=\"Blessed Body\" action=\"bypass -h npc_%objectId%_BlessedBody\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">"); 
         tb.append("<img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
         tb.append("<br>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<table border=0 bgcolor=000000 width=300 height=20>");
         tb.append("<tr>");
         tb.append("<td align=\"center\" width=\"300\"><font color=\"666666\">Vote for us :</font><font color=\"FF5555\"> www.l2addicted.eu</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("</body></html>");

                NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
                msg.setHtml(tb.toString());
                msg.replace("%objectId%", String.valueOf(this.getObjectId()));
       
                player.sendPacket(msg);
        }
   public void showPassiveWindow(L2PcInstance player, int val)
        {
                TextBuilder tb = new TextBuilder();
         tb.append("<html><head><title>Lineage II Addicted - Passive Augment</title></head><body>");
         tb.append("<center><img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("<center>");
         tb.append("<table bgcolor=000000 width=300 height=12>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"FF0000\">{Remove Pks}</font></td>");
         tb.append("</tr>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"666666\">Add a passive skill for 10 donate coins.</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<br>");
         tb.append("<center>");
                tb.append("<button value=\"Empower\" action=\"bypass -h npc_%objectId%_Empower\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");
                tb.append("<button value=\"M.Barrier\" action=\"bypass -h npc_%objectId%_MagicBarrier\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");        
                tb.append("<button value=\"Might\" action=\"bypass -h npc_%objectId%_Might\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");        
                tb.append("<button value=\"Shield\" action=\"bypass -h npc_%objectId%_Shield\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");   
                tb.append("<button value=\"Duel Might\" action=\"bypass -h npc_%objectId%_DuelMight\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");   
                tb.append("<button value=\"Focus\" action=\"bypass -h npc_%objectId%_Focus\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");   
                tb.append("<button value=\"Wild Magic\" action=\"bypass -h npc_%objectId%_WildMagic\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");   
                tb.append("<button value=\"Agility\" action=\"bypass -h npc_%objectId%_Agility\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");   
                tb.append("<button value=\"Guidance\" action=\"bypass -h npc_%objectId%_Guidance\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\">");   
         tb.append("<img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
         tb.append("<br>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<table border=0 bgcolor=000000 width=300 height=20>");
         tb.append("<tr>");
         tb.append("<td align=\"center\" width=\"300\"><font color=\"666666\">Vote for us :</font><font color=\"FF5555\"> www.l2addicted.eu</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("</body></html>");

                NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
                msg.setHtml(tb.toString());
                msg.replace("%objectId%", String.valueOf(this.getObjectId()));
       
                player.sendPacket(msg);
        }
   
   public void showPksWindow(L2PcInstance player, int val)
        {
                TextBuilder tb = new TextBuilder();
                
         tb.append("<html><head><title>Lineage II Addicted - Remove PKs</title></head><body>");
         tb.append("<center><img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("<center>");
         tb.append("<table bgcolor=000000 width=300 height=12>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"FF0000\">{Remove Pks}</font></td>");
         tb.append("</tr>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"666666\">Clean Pks. 1 pk = 1 Donate coin.</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<br>");
         tb.append("<center>");
                tb.append("<edit var=\"pkReduceCount\" width=80 height=15>");
                tb.append("<button value=\"Clean Pks\" action=\"bypass -h npc_%objectId%_reducePks $pkReduceCount\" back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\" width=75 height=21>");
         tb.append("<img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
         tb.append("<br>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<table border=0 bgcolor=000000 width=300 height=20>");
         tb.append("<tr>");
         tb.append("<td align=\"center\" width=\"300\"><font color=\"666666\">Vote for us :</font><font color=\"FF5555\"> www.l2addicted.eu</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("</body></html>");
                NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
                msg.setHtml(tb.toString());
                msg.replace("%objectId%", String.valueOf(this.getObjectId()));
       
                player.sendPacket(msg);
        }
   
   public void showNameWindow(L2PcInstance player, int val)
        {
                TextBuilder tb = new TextBuilder();
                
         tb.append("<html><head><title>Lineage II Addicted - Rename</title></head><body>");
         tb.append("<center><img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("<center>");
         tb.append("<table bgcolor=000000 width=300 height=12>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"FF0000\">{Rename}</font></td>");
         tb.append("</tr>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"666666\">Change your name for 10 donate coins.</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<br>");
         tb.append("<center>");
                tb.append("<edit var=\"newName\" width=80 height=15>");
                tb.append("<button value=\"Rename\" action=\"bypass -h npc_%objectId%_changeName $newName\" back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\" width=75 height=21>");
         tb.append("<img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
         tb.append("<br>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<table border=0 bgcolor=000000 width=300 height=20>");
         tb.append("<tr>");
         tb.append("<td align=\"center\" width=\"300\"><font color=\"666666\">Vote for us :</font><font color=\"FF5555\"> www.l2addicted.eu</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("</body></html>");
                NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
                msg.setHtml(tb.toString());
                msg.replace("%objectId%", String.valueOf(this.getObjectId()));
       
                player.sendPacket(msg);
        }
   
   public void showClanNameWindow(L2PcInstance player, int val)
        {
                TextBuilder tb = new TextBuilder();
                
         tb.append("<html><head><title>Lineage II Addicted - Rename</title></head><body>");
         tb.append("<center><img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("<center>");
         tb.append("<table bgcolor=000000 width=300 height=12>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"FF0000\">{Rename}</font></td>");
         tb.append("</tr>");
         tb.append("<tr>");
         tb.append("<td width=\"300\" align=\"center\"><font color=\"666666\">Change your clan name for 10 donate coins.</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<br>");
         tb.append("<center>");
                tb.append("<edit var=\"newClanName\" width=80 height=15>");
                tb.append("<button value=\"Rename\" action=\"bypass -h npc_%objectId%_changeClanName $newClanName\" back=\"L2UI_ch3.Btn1_normalDisable\" fore=\"L2UI_ch3.Btn1_normalDisable\" width=75 height=21>");
         tb.append("<img src=\"l2ui_ch3.herotower_deco\" width=256 height=32>");
         tb.append("<br>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("<table border=0 bgcolor=000000 width=300 height=20>");
         tb.append("<tr>");
         tb.append("<td align=\"center\" width=\"300\"><font color=\"666666\">Vote for us :</font><font color=\"FF5555\"> www.l2addicted.eu</font></td>");
         tb.append("</tr>");
         tb.append("</table>");
         tb.append("<img src=\"L2UI.SquareGray\" width=300 height=1>");
         tb.append("</center>");
         tb.append("</body></html>");
                NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
                msg.setHtml(tb.toString());
                msg.replace("%objectId%", String.valueOf(this.getObjectId()));
       
                player.sendPacket(msg);
        }

private static void addAugment(L2PcInstance player, int attribute, int skill, int level)
{
L2ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND); 
if (item == null) 
{
player.sendMessage("You have to equip a weapon.");
return;
}
if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) < 20)
{

player.sendMessage("You dont have enough item.");
return;
}
if (item.isAugmented())
{
player.sendMessage("Remove the augment first.");
return;
}

Connection con = null;
try
{
player.destroyItemByItemId("Consume", ITEM_ID, 20, player, true);
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("REPLACE INTO augmentations VALUES(?,?,?,?)");
statement.setInt(1, item.getObjectId());

statement.setInt(2, attribute*65536+1);
statement.setInt(3, skill);
statement.setInt(4, level);


statement.executeUpdate();
player.sendPacket(new SystemMessage(SystemMessageId.THE_ITEM_WAS_SUCCESSFULLY_AUGMENTED));
statement.close();
player.sendMessage("You will be disconnected in 3 seconds to enable the security");
try
{
Thread.sleep(3000L);
}
catch (Exception e)
{
}

player.deleteMe();

player.sendPacket(new LeaveWorld());
}
catch (Exception e)
{
}
finally
{
L2DatabaseFactory.close(con);
}
}

private void updateDatabasex(L2PcInstance player, boolean newDonator)
{
Connection con = null;
try
{
if(player == null)
return;

con = L2DatabaseFactory.getInstance().getConnection(false);
PreparedStatement stmt = con.prepareStatement(INSERT_DATAA);

stmt.setInt(1, player.getObjectId());
stmt.setString(2, player.getName());
stmt.setInt(3, player.isHero() ? 1 : 0);
stmt.setInt(4, player.isNoble() ? 1 : 0);
stmt.setInt(5, 1);
stmt.execute();
stmt.close();
stmt = null;
}
catch(Exception e)
{
if(Config.ENABLE_ALL_EXCEPTIONS)
e.printStackTrace();

LOGGER.error("Error: could not update database: ", e);
}
finally
{
CloseUtil.close(con);

con = null;
}
}

private void updateDatabase(L2PcInstance player, long heroTime)
{
Connection con = null;
try
{
if(player == null)
return;

con = L2DatabaseFactory.getInstance().getConnection(false);
PreparedStatement stmt = con.prepareStatement(INSERT_DATA);

stmt.setInt(1, player.getObjectId());
stmt.setString(2, player.getName());
stmt.setInt(3, 1);
stmt.setInt(4, player.isNoble() ? 1 : 0);
stmt.setInt(5, player.isDonator() ? 1 : 0);
stmt.setLong(6, heroTime == 0 ? 0 : System.currentTimeMillis() + heroTime);
stmt.execute();
stmt.close();
stmt = null;
}
catch(Exception e)
{
if(Config.ENABLE_ALL_EXCEPTIONS)
e.printStackTrace();

LOGGER.error("Error: could not update database: ", e);
}
finally
{
CloseUtil.close(con);

con = null;
}
}

private boolean isValidName(final String text)
{
boolean result = true;
final String test = text;
Pattern pattern;

try
{
pattern = Pattern.compile(Config.CNAME_TEMPLATE);
}
catch (final PatternSyntaxException e) // case of illegal pattern
{
if (Config.ENABLE_ALL_EXCEPTIONS)
e.printStackTrace();

pattern = Pattern.compile(".*");
}

final Matcher regexp = pattern.matcher(test);
if (!regexp.matches())
result = false;

return result;
}

private boolean isValidClanName(final String text)
{
boolean result = true;
final String test = text;
Pattern pattern;

try
{
pattern = Pattern.compile(Config.CLAN_NAME_TEMPLATE);
}
catch (final PatternSyntaxException e) // case of illegal pattern
{
if (Config.ENABLE_ALL_EXCEPTIONS)
e.printStackTrace();

pattern = Pattern.compile(".*");
}

final Matcher regexp = pattern.matcher(test);
if (!regexp.matches())
result = false;

return result;
}
}
Edited by te0x
Posted (edited)

One question, why text Builder and this crappy connection close way? Frozen still java 6..?

 

Db update for set noble? Dat frozen.. :o

Edited by SweeTs
Posted (edited)

One question, why text Builder and this crappy connection close way? Frozen still java 6..?

 

Db update for set noble? Dat frozen.. :o

i dont like to mess with new files in data. how much can 5-6 text builder can effect ? ;p 

the update on set nobl it was my mistake(i though it needs too but it didnt and i forgot to remove it). anyways it needs a cleanup for sure, additionals Configs in order to change the item request easier.

although it works :3

Edited by te0x
Posted

Why hard coded it anyway? Why you don't just html file it lol

I just said it. I don't like to add more files in data.
Posted (edited)

i said it before dude. L2te0xServiceNpc 

you say that about npc type :D

But anyway...ty.

Now i add it and i test it.

Edited by GastOne

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



  • Posts

    • SOCNET SMM - is a new solution among all existing SMM panels. Our panel offers more than 6100+ promotion services in social networks such as Instagram, TikTok, Telegram, VKontakte, Reddit, YouTube, Twitter (X.com), Snapchat, Spotify and many, many others services + increasing the traffic of your website in search results. Our service cooperates with high-quality and proven service providers for promoting your profiles, posts, videos, publications and others on various social networks and your website in the search engine, as well as an additional way to earn income from your referrals.   Available payment methods: via PayPal, any cryptocurrency (+Binance Pay), Telegram Stars, Cash App, or any bank card.   ⭐ Our SMM-Panel for social media promotion ⭐ SOCNET.PRO ⭐ Our online store⭐  SOCNET.STORE ⭐ Our Telegram Stars bot ⭐ SOCNET.CC ⭐ Telegram store ⭐ SOCNET.SHOP ⭐ News: ⭐ ➡ Telegram channel ➡ WhatsApp channel ➡ Discord server ⭐ Contacts and support: ⭐ ➡ Telegram support ➡ WhatsApp support ➡ Discord support: socnet_support ➡ Email support: solomonbog@socnet.store     We have been operating for a long time and have gathered a huge list of reviews about our work! Our large list of positive and honest reviews is presented on our website!   ㅤㅤINSTAGRAM SERVICES   Instagram - Followers ~ Real ~ Refill  30D ~ 20k-100k/days  | Start From $5.324 per 1000 Instagram - Likes ~ 300k ~ 100k/days ~ Asian/Russian  | Start from $0.051 per 1000 Instagram - Views ( All Videos ) ~ 500k-1M/days ~ Instant | Start From $0.003  per 1000 Instagram - Comment ~ Custom ~ 1M ~ Refill  30D ~ 1k/Days ~ Asian/Turkish | Start from $4.875 per 1000 Instagram - Instagram - Story Views ~ All Stories ~ 150k ~ Refill  30D ~ 5k/days | Start from $0.148  per 1000 Instagram - Mentions ~ Custom List ~ 100K/Days ~ 0-12hrs  | Start from $2.763 per 1000   ㅤㅤTELEGRAM SERVICES   Telegram - Members ~ Max 100k ~ 100-1k/days ~ 0-1hrs | Start from $0.604 per 1000 Telegram - Premium Members + Views: From search l 7 day Premium l 7 day No Drop | Start from $7.216  per 1000 Telegram Bot Start - Instant - Speed : 10K/D - NoRefill  | Start from $0.297 per 1000 Telegram - Channel/Group Members ~ USA~ Max 70k ~ Refill 10D ~ 5k/days ~ Instant | Start from $1.788 per 1000 Telegram - Views ~ 1 POST ~ Instant  | Start from $0.005 per 1000 Telegram - Reactions | Start from $1.306 per 1000   ㅤㅤTWITTER (x.com) SERVICES   Twitter (x.com) - Likes ~ 200k ~ 10k/days ~ Asian | Start from $1.187 per 1000 Twitter (x.com) - Retweets ~ 200k ~ 10k/days ~ Asian | Start from $0.894 per 1000 Twitter (x.com) - Followers | Non-Drop | 30 Days Refill | Auto Refill Every 1 Hours | Start from $19.50 per 1000 Twitter (x.com) - Likes ~ 350k ~ 2k-10k/days ~ Mixed ~ | Start from $1.727 per 1000 Twitter (x.com) - Tweet Views ~ Max 100M ~ Refill 30D ~ 10M/days ~ Instant | Start from $0.032 per 1000 Twitter (x.com) - Tweet Impression ~ Max 1M ~ 1M/days ~ Instant | Start from $0.114 per 1000   ㅤㅤTHREADS   Threads - Likes ~ No Refill ~ 1k-10k/days ~ 0-1hrs  | Start from $1.045 per 1000 Threads - Followers ~ 500-1k/days ~ No Refill ~ Instant | Start from $2.438 per 1000 Threads - Reshare ~ 1k-5k/days ~ Refill 30D ~ 0-2hrs  | Start from $8.125  per 1000   ㅤㅤLIKEE   Likee - Follower ~ Max 30k ~ Real ~ Instant | Start from $10.112 per 1000 Likee - Likes ~ Max 30k ~ Real ~ Instant | Start from $3.787 per 1000 Likee - Shares ~ Max 30k ~ Real ~ Instant | Start from $2.649 per 1000 Likee - Comments ~ Max 30k ~ Real ~ Instant | Start from $11.473 per 1000 Likee - Views ~ Max 1m ~ Real ~ Instant | Start from $3.787 per 1000   ㅤㅤTIKTOK SERVICES   TikTok - Views ~ 10k-100k/days | Start from $0.033 per 1000 TikTok - Likes + Views ~ 30D ~ 3k-5k/days | Start from $0.203 per 1000 TikTok - Followers ~ 30D ~ 5k/days | Start from $2.474 per 1000 TikTok - Shares ~ 30D ~ 1M/days | Start from $0.163 per 1000 TikTok - Save ~ 30D ~ 3k-5k/days | Start from $0.163  per 1000   ㅤㅤFACEBOOK SERVICES   Facebook - Video Views ~ 5k-100k/days | Start from $0.11 per 1000 Facebook - Post Likes ~ 5k/days | Start from $2.548 per 1000 Facebook - Page Likes + Followers ~ 1k-10k/days ~ Instant | Start from $0.85 per 1000 Facebook - Share ~ 30D ~ 1k-5k/days | Start from $1.451 per 1000 Facebook - Post/Photo likes ~ 20k ~ LifeTime ~ 1k-50k/days ~ Instant | Start from 0.66$ per 1000 Facebook - Emoticons Post Likes ~ 1k-5k/Days ~ INSTANT | Start from $0.943 per 1000 Facebook Live Stream [ Watch 15 Minute ] | Start from $1.338 per 1000 Facebook - Video/Reels Views ~ 3 Sec ~ 500k-1m/days | Start from $0.11 per 1000   ㅤㅤREDDIT SERVICES   Reddit Channel Subscribers [Refill 30 Days] [Max: 100M] [Start Time: 0 -1 Hour] [Speed: 5M/Day] | Start from $2.08 per 1000 Reddit Shares | 500M | Refill: Lifetime | ULTRAFAST | 0-10 Min | 100M/Day | Start from $0.371 per 1000 Reddit Views | 500M | Refill: Lifetime | ULTRAFAST | 0-10 Min | 100M/Day | Start from $0.371 per 1000 Reddit View + Shares | 500M | Refill: Lifetime | ULTRAFAST | 0-10 Min | 100M/Day | Start from $0.741 per 1000 Reddit Link Shares | 500M | Refill: Lifetime | ULTRAFAST | 0-10 Min | 100M/Day | Start from $0.371 per 1000   ㅤㅤDISCORD SERVICES   Discord Offline Members | READ THE DESCRIPTION | ADD BOT | HQ | MAX 5K | Start from $1.58 per 1000 Discord Global Online Server Members | +2 Month Online | Max 15K | Start from $108.986 per 1000 Discord Server Boosts | For 1/3/6/12 Months | 1x-14x boosts | Start from 2.23$ per 1 boost Discord | Only Reactions | UHQ | Instant Start | Start from $5.695 per 1000   ㅤㅤLINKEDIN SERVICES   LinkedIn - Profile Followers ~ Max 1k ~ Refill 30D ~ 500-1k/days ~ 0-1Hrs | Start from $21.97 per 1000 LinkedIn - Page Followers ~ Max 1k ~ Refill 30D ~ 500-1k/days ~ 0-1Hrs | Start from $21.97 per 1000 Linkedin - Post Likes [+ Impressions ] ~ Refill 30D ~ 500/days ~ Instant | Start from $16.90 per 1000 Linkedin - Comments [ Random ] ~ Max 1k ~ No Refill ~ 30-50/days ~ 1-6hrs | Start from $28.73 per 1000 LinkedIn - Connection ~ Refill 30D ~ 500/days ~ Instant | Start from $28.73  per 1000   ㅤㅤYOUTUBE SERVICES   YouTube - Views ~ LifeTime ~ 500k-1M/Days | Start from $1.488 per 1000 YouTube - Likes ~ No Refill ~ 1k-5k/days ~ Instant  | Start from $0.13 per 1000 Youtube - Subscribers | MQ 5K | 250-500 Per Day R30 | Start from $78.00 per 1000 YouTube - Comments ~ Random ~ 100k ~ No Refill ~ 1k-5k/days ~ 0-3Hrs | Start from $19.013 per 1000 YouTube - Shorts Likes ~ 50k-60k/days ~ Refill 30D - Instant | Start from $1.30 per 1000 YouTube - Live Stream Reaction ~ Help Small Boosting Live ~ Instant  | Start from $0.192 per 1000     ㅤㅤWHATSAPP SERVICES   WhatsApp Channel Members [ Global-Real ] [ Speed: 500/day ] [ Start: 0-1hrs ] | Start from $15.647 per 1000 WhatsApp Group Members [ Mix Country ] [ Real Quality ] | Start from $30.893 per 1000 WhatsApp Channel Members [ Mix Country ] [ Real Quality ] | Start from $28.179 per 1000 Whatsapp Channel Emoji Reactions | Start from $6.797 per 1000 Whatsapp Channel Post Emoji Reactions | Random Mix |  Start from $3.861 per 1000   ㅤㅤTWITCH/KICK/TROVO SERVICES   Twitch - Followers ~ Max 1k ~ 1k/Days ~ Instant | Start from $0.183 per 1000 Twitch - Video Views ~ Max 20k ~ No Refill ~ 5k/days ~ 0-1Hrs  | Start from $1.073 per 1000 Twitch - Clip Views ~ Max 20k ~ No Refill ~ 5k/days ~ 0-1Hrs | Start from $0.163 per 1000 Twitch Live Views | 10 Minutes | Start from $0.597 per 1000 Trovo Live Followers [Max: 5K] [Offers] [1-2/Hour] [30 Day Refill]  | Start from $18.688 per 1000 Kick - Followers ~ 1.2k ~ No Refill ~ 1k/Days ~ INSTANT | Start from $4.55 per 1000 Kick - Live Viewers - Stable viewers HQ ~ Duration: 60 min | Start from $40.30 per 1000   ㅤㅤSOUNDCLOUD SERVICES   Soundcloud - Followers ~ 2.5k ~ Refill 30D ~ 100-500/days ~ Instant | Start from $7.132 per 1000 Soundcloud - Likes ~ 2.5k ~ Refill 30D ~ 100-500/days ~ Instant | Start from $7.132 per 1000 Soundcloud - Reposts ~ 2.5k ~ Refill 30D ~ 100-500/days ~ Instant | Start from $7.132 per 1000   ㅤㅤSPOTIFY SERVICES   Spotify - Followers ~ 292k ~ 20k/days | Start from $4.225 per 1000 Spotify - Saves ~ 400k ~ 20k/days | Start from $0.488 per 1000 Spotify - Monthly Listeners ~ LifeTime ~ 5k-20k/days | Start from $1.788  per 1000   ㅤㅤQUORA SERVICES   Quora.com - Upvote ~ Max 10k ~ Refill 30D  | Start from $8.125 per 1000 Quora.com - Shares ~ Max 10k ~ Refill 30D  | Start from $8.125 per 1000 Quora.com - Followers ~ Max 10k ~ Refill 30D  | Start from $8.45 per 1000   ㅤㅤWEBSITE TRAFFIC Worldwide / GEO Target - Custom Referral Traffic | Start from $1.284 per 1000 visits WorldWide Traffic from Google.com [Organic] [Custom Keywords] | Start from $0.244 per 1000 visits WorldWide Traffic from Google.com | Start from $0.244 per 1000 visits WorldWide Traffic from Facebook  | Start from $0.244 per 1000 visits WorldWide Traffic from Instagram | Start from $0.244 per 1000 visits WorldWide Traffic from Quora | Start from $0.244 per 1000 visits WorldWide Traffic from Reddit | Start from $0.244 per 1000 visits WorldWide Traffic from YouTube | Start from $0.244 per 1000 visits WorldWide Traffic from Twitter | Start from $0.244 per 1000 visits Attention: this text block does not represent our full product range; for more details, please visit the relevant links below!   If you have any questions, our support team is always ready to help!   Available payment methods: via PayPal, any cryptocurrency (+Binance Pay), Telegram Stars, Cash App, or any bank card.   ⭐ Our SMM-Panel for social media promotion ⭐ SOCNET.PRO ⭐ Our online store⭐  SOCNET.STORE ⭐ Our Telegram Stars bot ⭐ SOCNET.CC ⭐ Telegram store ⭐ SOCNET.SHOP   ⭐ News: ⭐ ➡ Telegram channel ➡ WhatsApp channel ➡ Discord server ⭐ Contacts and support: ⭐ ➡ Telegram support ➡ WhatsApp support ➡ Discord support: socnet_support ➡ Email support: solomonbog@socnet.store We have been operating for a long time and have gathered a huge list of reviews about our work! Our large list of positive and honest reviews is presented on our website! ⭐ Get a $1 bonus for your first test run ⭐ Just submit a support ticket with the subject “Get Trial Bonus” on our website. Go to SMM Panel (clickable) or contact our bot support ⭐ We invite you to COOPERATE and EARN with us ⭐   Want to sell your product or service in our stores and earn money?   Become our partner or propose mutually beneficial cooperation?   You can contact us via the CONTACTS provided in this topic.   FAQ and Refund Policy If you have any questions or issues, our fast support service is ready to respond to your requests! A refund for a service that does not fully meet the requirements or fails to meet the stated quality will only be issued if the product description specified a warranty and the period of good faith warranty. In other cases, a refund for the service will not be fully processed and will not be issued! By purchasing such a service, you automatically agree to our refund rules for undelivered services! We currently accept CRYPTOMUS, Payeer, NotPayments, Perfect Money, Russian and Ukrainian bank cards, AliPay, BinancePay, CryptoBot, credit bank cards, and PayPal. The $1 registration bonus can only be used for purchases and only once after the user's first registration in any of the socnet projects. We value every customer and provide replacements for invalid accounts via our contacts! p.s: The purchase bonus can be used in any SOCNET projects: online store or Telegram bots.
    • SOCNET SMM - is a new solution among all existing SMM panels. Our panel offers more than 6100+ promotion services in social networks such as Instagram, TikTok, Telegram, VKontakte, Reddit, YouTube, Twitter (X.com), Snapchat, Spotify and many, many others services + increasing the traffic of your website in search results. Our service cooperates with high-quality and proven service providers for promoting your profiles, posts, videos, publications and others on various social networks and your website in the search engine, as well as an additional way to earn income from your referrals.   Available payment methods: via PayPal, any cryptocurrency (+Binance Pay), Telegram Stars, Cash App, or any bank card.   ⭐ Our SMM-Panel for social media promotion ⭐ SOCNET.PRO ⭐ Our online store⭐  SOCNET.STORE ⭐ Our Telegram Stars bot ⭐ SOCNET.CC ⭐ Telegram store ⭐ SOCNET.SHOP ⭐ News: ⭐ ➡ Telegram channel ➡ WhatsApp channel ➡ Discord server ⭐ Contacts and support: ⭐ ➡ Telegram support ➡ WhatsApp support ➡ Discord support: socnet_support ➡ Email support: solomonbog@socnet.store     We have been operating for a long time and have gathered a huge list of reviews about our work! Our large list of positive and honest reviews is presented on our website!   ㅤㅤINSTAGRAM SERVICES   Instagram - Followers ~ Real ~ Refill  30D ~ 20k-100k/days  | Start From $5.324 per 1000 Instagram - Likes ~ 300k ~ 100k/days ~ Asian/Russian  | Start from $0.051 per 1000 Instagram - Views ( All Videos ) ~ 500k-1M/days ~ Instant | Start From $0.003  per 1000 Instagram - Comment ~ Custom ~ 1M ~ Refill  30D ~ 1k/Days ~ Asian/Turkish | Start from $4.875 per 1000 Instagram - Instagram - Story Views ~ All Stories ~ 150k ~ Refill  30D ~ 5k/days | Start from $0.148  per 1000 Instagram - Mentions ~ Custom List ~ 100K/Days ~ 0-12hrs  | Start from $2.763 per 1000   ㅤㅤTELEGRAM SERVICES   Telegram - Members ~ Max 100k ~ 100-1k/days ~ 0-1hrs | Start from $0.604 per 1000 Telegram - Premium Members + Views: From search l 7 day Premium l 7 day No Drop | Start from $7.216  per 1000 Telegram Bot Start - Instant - Speed : 10K/D - NoRefill  | Start from $0.297 per 1000 Telegram - Channel/Group Members ~ USA~ Max 70k ~ Refill 10D ~ 5k/days ~ Instant | Start from $1.788 per 1000 Telegram - Views ~ 1 POST ~ Instant  | Start from $0.005 per 1000 Telegram - Reactions | Start from $1.306 per 1000   ㅤㅤTWITTER (x.com) SERVICES   Twitter (x.com) - Likes ~ 200k ~ 10k/days ~ Asian | Start from $1.187 per 1000 Twitter (x.com) - Retweets ~ 200k ~ 10k/days ~ Asian | Start from $0.894 per 1000 Twitter (x.com) - Followers | Non-Drop | 30 Days Refill | Auto Refill Every 1 Hours | Start from $19.50 per 1000 Twitter (x.com) - Likes ~ 350k ~ 2k-10k/days ~ Mixed ~ | Start from $1.727 per 1000 Twitter (x.com) - Tweet Views ~ Max 100M ~ Refill 30D ~ 10M/days ~ Instant | Start from $0.032 per 1000 Twitter (x.com) - Tweet Impression ~ Max 1M ~ 1M/days ~ Instant | Start from $0.114 per 1000   ㅤㅤTHREADS   Threads - Likes ~ No Refill ~ 1k-10k/days ~ 0-1hrs  | Start from $1.045 per 1000 Threads - Followers ~ 500-1k/days ~ No Refill ~ Instant | Start from $2.438 per 1000 Threads - Reshare ~ 1k-5k/days ~ Refill 30D ~ 0-2hrs  | Start from $8.125  per 1000   ㅤㅤLIKEE   Likee - Follower ~ Max 30k ~ Real ~ Instant | Start from $10.112 per 1000 Likee - Likes ~ Max 30k ~ Real ~ Instant | Start from $3.787 per 1000 Likee - Shares ~ Max 30k ~ Real ~ Instant | Start from $2.649 per 1000 Likee - Comments ~ Max 30k ~ Real ~ Instant | Start from $11.473 per 1000 Likee - Views ~ Max 1m ~ Real ~ Instant | Start from $3.787 per 1000   ㅤㅤTIKTOK SERVICES   TikTok - Views ~ 10k-100k/days | Start from $0.033 per 1000 TikTok - Likes + Views ~ 30D ~ 3k-5k/days | Start from $0.203 per 1000 TikTok - Followers ~ 30D ~ 5k/days | Start from $2.474 per 1000 TikTok - Shares ~ 30D ~ 1M/days | Start from $0.163 per 1000 TikTok - Save ~ 30D ~ 3k-5k/days | Start from $0.163  per 1000   ㅤㅤFACEBOOK SERVICES   Facebook - Video Views ~ 5k-100k/days | Start from $0.11 per 1000 Facebook - Post Likes ~ 5k/days | Start from $2.548 per 1000 Facebook - Page Likes + Followers ~ 1k-10k/days ~ Instant | Start from $0.85 per 1000 Facebook - Share ~ 30D ~ 1k-5k/days | Start from $1.451 per 1000 Facebook - Post/Photo likes ~ 20k ~ LifeTime ~ 1k-50k/days ~ Instant | Start from 0.66$ per 1000 Facebook - Emoticons Post Likes ~ 1k-5k/Days ~ INSTANT | Start from $0.943 per 1000 Facebook Live Stream [ Watch 15 Minute ] | Start from $1.338 per 1000 Facebook - Video/Reels Views ~ 3 Sec ~ 500k-1m/days | Start from $0.11 per 1000   ㅤㅤREDDIT SERVICES   Reddit Channel Subscribers [Refill 30 Days] [Max: 100M] [Start Time: 0 -1 Hour] [Speed: 5M/Day] | Start from $2.08 per 1000 Reddit Shares | 500M | Refill: Lifetime | ULTRAFAST | 0-10 Min | 100M/Day | Start from $0.371 per 1000 Reddit Views | 500M | Refill: Lifetime | ULTRAFAST | 0-10 Min | 100M/Day | Start from $0.371 per 1000 Reddit View + Shares | 500M | Refill: Lifetime | ULTRAFAST | 0-10 Min | 100M/Day | Start from $0.741 per 1000 Reddit Link Shares | 500M | Refill: Lifetime | ULTRAFAST | 0-10 Min | 100M/Day | Start from $0.371 per 1000   ㅤㅤDISCORD SERVICES   Discord Offline Members | READ THE DESCRIPTION | ADD BOT | HQ | MAX 5K | Start from $1.58 per 1000 Discord Global Online Server Members | +2 Month Online | Max 15K | Start from $108.986 per 1000 Discord Server Boosts | For 1/3/6/12 Months | 1x-14x boosts | Start from 2.23$ per 1 boost Discord | Only Reactions | UHQ | Instant Start | Start from $5.695 per 1000   ㅤㅤLINKEDIN SERVICES   LinkedIn - Profile Followers ~ Max 1k ~ Refill 30D ~ 500-1k/days ~ 0-1Hrs | Start from $21.97 per 1000 LinkedIn - Page Followers ~ Max 1k ~ Refill 30D ~ 500-1k/days ~ 0-1Hrs | Start from $21.97 per 1000 Linkedin - Post Likes [+ Impressions ] ~ Refill 30D ~ 500/days ~ Instant | Start from $16.90 per 1000 Linkedin - Comments [ Random ] ~ Max 1k ~ No Refill ~ 30-50/days ~ 1-6hrs | Start from $28.73 per 1000 LinkedIn - Connection ~ Refill 30D ~ 500/days ~ Instant | Start from $28.73  per 1000   ㅤㅤYOUTUBE SERVICES   YouTube - Views ~ LifeTime ~ 500k-1M/Days | Start from $1.488 per 1000 YouTube - Likes ~ No Refill ~ 1k-5k/days ~ Instant  | Start from $0.13 per 1000 Youtube - Subscribers | MQ 5K | 250-500 Per Day R30 | Start from $78.00 per 1000 YouTube - Comments ~ Random ~ 100k ~ No Refill ~ 1k-5k/days ~ 0-3Hrs | Start from $19.013 per 1000 YouTube - Shorts Likes ~ 50k-60k/days ~ Refill 30D - Instant | Start from $1.30 per 1000 YouTube - Live Stream Reaction ~ Help Small Boosting Live ~ Instant  | Start from $0.192 per 1000     ㅤㅤWHATSAPP SERVICES   WhatsApp Channel Members [ Global-Real ] [ Speed: 500/day ] [ Start: 0-1hrs ] | Start from $15.647 per 1000 WhatsApp Group Members [ Mix Country ] [ Real Quality ] | Start from $30.893 per 1000 WhatsApp Channel Members [ Mix Country ] [ Real Quality ] | Start from $28.179 per 1000 Whatsapp Channel Emoji Reactions | Start from $6.797 per 1000 Whatsapp Channel Post Emoji Reactions | Random Mix |  Start from $3.861 per 1000   ㅤㅤTWITCH/KICK/TROVO SERVICES   Twitch - Followers ~ Max 1k ~ 1k/Days ~ Instant | Start from $0.183 per 1000 Twitch - Video Views ~ Max 20k ~ No Refill ~ 5k/days ~ 0-1Hrs  | Start from $1.073 per 1000 Twitch - Clip Views ~ Max 20k ~ No Refill ~ 5k/days ~ 0-1Hrs | Start from $0.163 per 1000 Twitch Live Views | 10 Minutes | Start from $0.597 per 1000 Trovo Live Followers [Max: 5K] [Offers] [1-2/Hour] [30 Day Refill]  | Start from $18.688 per 1000 Kick - Followers ~ 1.2k ~ No Refill ~ 1k/Days ~ INSTANT | Start from $4.55 per 1000 Kick - Live Viewers - Stable viewers HQ ~ Duration: 60 min | Start from $40.30 per 1000   ㅤㅤSOUNDCLOUD SERVICES   Soundcloud - Followers ~ 2.5k ~ Refill 30D ~ 100-500/days ~ Instant | Start from $7.132 per 1000 Soundcloud - Likes ~ 2.5k ~ Refill 30D ~ 100-500/days ~ Instant | Start from $7.132 per 1000 Soundcloud - Reposts ~ 2.5k ~ Refill 30D ~ 100-500/days ~ Instant | Start from $7.132 per 1000   ㅤㅤSPOTIFY SERVICES   Spotify - Followers ~ 292k ~ 20k/days | Start from $4.225 per 1000 Spotify - Saves ~ 400k ~ 20k/days | Start from $0.488 per 1000 Spotify - Monthly Listeners ~ LifeTime ~ 5k-20k/days | Start from $1.788  per 1000   ㅤㅤQUORA SERVICES   Quora.com - Upvote ~ Max 10k ~ Refill 30D  | Start from $8.125 per 1000 Quora.com - Shares ~ Max 10k ~ Refill 30D  | Start from $8.125 per 1000 Quora.com - Followers ~ Max 10k ~ Refill 30D  | Start from $8.45 per 1000   ㅤㅤWEBSITE TRAFFIC Worldwide / GEO Target - Custom Referral Traffic | Start from $1.284 per 1000 visits WorldWide Traffic from Google.com [Organic] [Custom Keywords] | Start from $0.244 per 1000 visits WorldWide Traffic from Google.com | Start from $0.244 per 1000 visits WorldWide Traffic from Facebook  | Start from $0.244 per 1000 visits WorldWide Traffic from Instagram | Start from $0.244 per 1000 visits WorldWide Traffic from Quora | Start from $0.244 per 1000 visits WorldWide Traffic from Reddit | Start from $0.244 per 1000 visits WorldWide Traffic from YouTube | Start from $0.244 per 1000 visits WorldWide Traffic from Twitter | Start from $0.244 per 1000 visits Attention: this text block does not represent our full product range; for more details, please visit the relevant links below!   If you have any questions, our support team is always ready to help!   Available payment methods: via PayPal, any cryptocurrency (+Binance Pay), Telegram Stars, Cash App, or any bank card.   ⭐ Our SMM-Panel for social media promotion ⭐ SOCNET.PRO ⭐ Our online store⭐  SOCNET.STORE ⭐ Our Telegram Stars bot ⭐ SOCNET.CC ⭐ Telegram store ⭐ SOCNET.SHOP   ⭐ News: ⭐ ➡ Telegram channel ➡ WhatsApp channel ➡ Discord server ⭐ Contacts and support: ⭐ ➡ Telegram support ➡ WhatsApp support ➡ Discord support: socnet_support ➡ Email support: solomonbog@socnet.store We have been operating for a long time and have gathered a huge list of reviews about our work! Our large list of positive and honest reviews is presented on our website! ⭐ Get a $1 bonus for your first test run ⭐ Just submit a support ticket with the subject “Get Trial Bonus” on our website. Go to SMM Panel (clickable) or contact our bot support ⭐ We invite you to COOPERATE and EARN with us ⭐   Want to sell your product or service in our stores and earn money?   Become our partner or propose mutually beneficial cooperation?   You can contact us via the CONTACTS provided in this topic.   FAQ and Refund Policy If you have any questions or issues, our fast support service is ready to respond to your requests! A refund for a service that does not fully meet the requirements or fails to meet the stated quality will only be issued if the product description specified a warranty and the period of good faith warranty. In other cases, a refund for the service will not be fully processed and will not be issued! By purchasing such a service, you automatically agree to our refund rules for undelivered services! We currently accept CRYPTOMUS, Payeer, NotPayments, Perfect Money, Russian and Ukrainian bank cards, AliPay, BinancePay, CryptoBot, credit bank cards, and PayPal. The $1 registration bonus can only be used for purchases and only once after the user's first registration in any of the socnet projects. We value every customer and provide replacements for invalid accounts via our contacts! p.s: The purchase bonus can be used in any SOCNET projects: online store or Telegram bots.
    • if is pvp server change type to raidboss 🙂 and check stats from xml
    • Hello community, I’d like to share an improved version of the L2smr editor for StaticMeshes, focused on solving some workflow issues I found in the original tool. CreditsThis project is based on the original acmi/L2smr repository https://github.com/acmi/L2smr , created by acmi, and I updated it to Java 17 with some additional features. Issues in the original L2smr Too many windows: each StaticMesh opened in a new one → cluttered desktop. No search: navigating through hundreds of StaticMeshActors was slow and tedious. Added improvements Flexible views Single Window Mode: reuse one window instead of opening new ones. Multiple Window Mode: still available for those who prefer having several views open simultaneously. Real-time Search Field Instant filtering as you type. Case-insensitive search. “Reset” button to quickly clear the search.     Installation and Execution: Clone the repository: git clone https://github.com/Jeep12/l2smr.git cd l2smr        2.Build the project:   ./gradlew build        3. Run the application:     ./run.bat      Or simply double-click on run.bat.     The run.bat script automatically extracts JavaFX from the included javafx-17.0.2.zip file in the javafx/ directory, sets up the required libraries, and launches the application. You don’t    need to install JavaFX separately.      Repository: https://github.com/Jeep12/l2smr     Maybe these features already existed in another version or fork, and they might not be very big changes, but since I didn’t know about them and found them necessary, I decided to          implement them myself and wanted to share them.      
    • no....Mobius L2Clientdat and L2FileEditor can do that...but still cant works with TaiWanese Grand Crusade ,especially Armorgrp.dat and Armorgrp-Classic.dat
  • 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