Jump to content
  • 0

Help with restricted item in TvT


Question

Posted

Hello there developers! my name is herneh,

 

Rev: L2Jserver Freya

 

I would like to restrict an item while in events "tvt" in this particular case, the item is "20399 labored Hat Blessed Body" i tried all I could but I havent got it yet! thats why I need your hel, I know that it would be an easy question for you, but i tried modifiing UseItem.java, TvTEvent.java adding the item restriction and I still didnt get it.

 

I would be apreciate wheter you give me a clue or a solution

Txz to all developers!

 

Bye

 

(EDIT) the revision

8 answers to this question

Recommended Posts

  • 0
Posted

in useItem.java you need to make check like

if(itemid == 20399 && player.isInTvt()){return;}

  • 0
Posted

/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
* 
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
* 
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.clientpackets;

import java.util.logging.Logger;

import com.l2jserver.Config;
import com.l2jserver.gameserver.GameTimeController;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.handler.IItemHandler;
import com.l2jserver.gameserver.handler.ItemHandler;
import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
import com.l2jserver.gameserver.model.L2ItemInstance;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.base.Race;
import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
import com.l2jserver.gameserver.network.serverpackets.ItemList;
import com.l2jserver.gameserver.network.serverpackets.ShowCalculator;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.templates.item.L2ArmorType;
import com.l2jserver.gameserver.templates.item.L2Item;
import com.l2jserver.gameserver.templates.item.L2Weapon;
import com.l2jserver.gameserver.templates.item.L2WeaponType;


/**
* This class ...
*
* @version $Revision: 1.18.2.7.2.9 $ $Date: 2005/03/27 15:29:30 $
*/
public final class UseItem extends L2GameClientPacket
{
private static Logger _log = Logger.getLogger(UseItem.class.getName());
private static final String _C__14_USEITEM = "[C] 14 UseItem";

private int _objectId;
private boolean _ctrlPressed;
private int _itemId;

/** Weapon Equip Task */
public static class WeaponEquipTask implements Runnable
{
	L2ItemInstance item;
	L2PcInstance activeChar;
	public WeaponEquipTask(L2ItemInstance it, L2PcInstance character){
		item = it;
		activeChar = character;
	}
	@Override
	public void run()
	{
		//If character is still engaged in strike we should not change weapon
		if (activeChar.isAttackingNow())
			return;
		// Equip or unEquip
		activeChar.useEquippableItem(item, false);
	}
}

@Override
protected void readImpl()
{
	_objectId = readD();
	_ctrlPressed = readD() != 0;
}

@Override
protected void runImpl()
{
	L2PcInstance activeChar = getClient().getActiveChar();
	if (activeChar == null)
		return;

	// Flood protect UseItem
	if (!getClient().getFloodProtectors().getUseItem().tryPerformAction("use item"))
		return;

	if (activeChar.getPrivateStoreType() != 0)
	{
		activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_TRADE_DISCARD_DROP_ITEM_WHILE_IN_SHOPMODE));
		activeChar.sendPacket(ActionFailed.STATIC_PACKET);
		return;
	}

	if (activeChar.getActiveTradeList() != null)
		activeChar.cancelActiveTrade();

	// cannot use items during Fear (possible more abnormal states?)
	if (activeChar.isAfraid())
	{
		// no sysmsg
		activeChar.sendPacket(ActionFailed.STATIC_PACKET);
		return;
	}

	// NOTE: disabled due to deadlocks
	// synchronized (activeChar.getInventory())
	// 	{
	L2ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId);
	if (item == null)
		return;

	if (item.getItem().getType2() == L2Item.TYPE2_QUEST)
	{
		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CANNOT_USE_QUEST_ITEMS);
		activeChar.sendPacket(sm);
		sm = null;
		return;
	}

	_itemId = item.getItemId();
	/*
	 * Alt game - Karma punishment // SOE
	 * 736  	Scroll of Escape
	 * 1538  	Blessed Scroll of Escape
	 * 1829  	Scroll of Escape: Clan Hall
	 * 1830  	Scroll of Escape: Castle
	 * 3958  	L2Day - Blessed Scroll of Escape
	 * 5858  	Blessed Scroll of Escape: Clan Hall
	 * 5859  	Blessed Scroll of Escape: Castle
	 * 6663  	Scroll of Escape: Orc Village
	 * 6664  	Scroll of Escape: Silenos Village
	 * 7117  	Scroll of Escape to Talking Island
	 * 7118  	Scroll of Escape to Elven Village
	 * 7119  	Scroll of Escape to Dark Elf Village
	 * 7120  	Scroll of Escape to Orc Village
	 * 7121  	Scroll of Escape to Dwarven Village
	 * 7122  	Scroll of Escape to Gludin Village
	 * 7123  	Scroll of Escape to the Town of Gludio
	 * 7124  	Scroll of Escape to the Town of Dion
	 * 7125  	Scroll of Escape to Floran
	 * 7126  	Scroll of Escape to Giran Castle Town
	 * 7127  	Scroll of Escape to Hardin's Private Academy
	 * 7128  	Scroll of Escape to Heine
	 * 7129  	Scroll of Escape to the Town of Oren
	 * 7130  	Scroll of Escape to Ivory Tower
	 * 7131  	Scroll of Escape to Hunters Village
	 * 7132  	Scroll of Escape to Aden Castle Town
	 * 7133  	Scroll of Escape to the Town of Goddard
	 * 7134  	Scroll of Escape to the Rune Township
	 * 7135  	Scroll of Escape to the Town of Schuttgart.
	 * 7554  	Scroll of Escape to Talking Island
	 * 7555  	Scroll of Escape to Elven Village
	 * 7556  	Scroll of Escape to Dark Elf Village
	 * 7557  	Scroll of Escape to Orc Village
	 * 7558  	Scroll of Escape to Dwarven Village
	 * 7559  	Scroll of Escape to Giran Castle Town
	 * 7618  	Scroll of Escape - Ketra Orc Village
	 * 7619  	Scroll of Escape - Varka Silenos Village
	 * 10129    Scroll of Escape : Fortress
	 * 10130    Blessed Scroll of Escape : Fortress
	 */
	if (!Config.ALT_GAME_KARMA_PLAYER_CAN_TELEPORT && activeChar.getKarma() > 0)
	{
		switch (_itemId)
		{
			case 736: case 1538: case 1829: case 1830: case 3958: case 5858:
			case 5859: case 6663: case 6664: case 7554: case 7555: case 7556:
			case 7557: case 7558: case 7559: case 7618: case 7619: case 10129:
			case 10130:
				return;
		}

		if (_itemId >= 7117 && _itemId <= 7135)
			return;
	}

+      if (_itemid == 20399 && player.isInTvt()) (isInTvt is not a method :S) i tried to
+      if (_itemId == 20399 && activeChar.isPlayerParticipant(getObjectId())) (but the method objectid is undefined in useitem.java :S)

    	if (activeChar.isFishing() && (_itemId < 6535 || _itemId > 6540))
	{
		// You cannot do anything else while fishing
		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DO_WHILE_FISHING_3);
		getClient().getActiveChar().sendPacket(sm);
		sm = null;
		return;
	}

	// Char cannot use item when dead
	if (activeChar.isDead())
	{
		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CANNOT_BE_USED);
		sm.addItemName(item);
		getClient().getActiveChar().sendPacket(sm);
		sm = null;
		return;
	}

	// No UseItem is allowed while the player is in special conditions
	if (activeChar.isStunned()
			|| activeChar.isSleeping()
			|| activeChar.isParalyzed()
			|| activeChar.isAlikeDead()
			|| activeChar.isAfraid()
			|| activeChar.isCastingNow())
	{
		return;
	}

	// Char cannot use pet items
	/*if ((item.getItem() instanceof L2Armor && item.getItem().getItemType() == L2ArmorType.PET)
			|| (item.getItem() instanceof L2Weapon && item.getItem().getItemType() == L2WeaponType.PET) )
	{
		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CANNOT_EQUIP_PET_ITEM); // You cannot equip a pet item.
		sm.addItemName(item);
		getClient().getActiveChar().sendPacket(sm);
		sm = null;
		return;
	}*/

	if (!activeChar.getInventory().canManipulateWithItemId(item.getItemId()))
	{
		activeChar.sendMessage("Cannot use this item.");
		return;
	}

	if (Config.DEBUG)
		_log.finest(activeChar.getObjectId() + ": use item " + _objectId);

	if (!item.isEquipped())
	{
		if (!item.getItem().checkCondition(activeChar, activeChar, true))
		{
			return;
		}
	}

	if (item.isEquipable())
	{
		// Don't allow hero equipment and restricted items during Olympiad
		if (activeChar.isInOlympiadMode() && (item.isHeroItem() || item.isOlyRestrictedItem()))
		{
			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_ITEM_CANT_BE_EQUIPPED_FOR_THE_OLYMPIAD_EVENT));
			return;
		}


		switch (item.getItem().getBodyPart())
		{
			case L2Item.SLOT_LR_HAND:
			case L2Item.SLOT_L_HAND:
			case L2Item.SLOT_R_HAND:
			{
				// prevent players to equip weapon while wearing combat flag
				if (activeChar.getActiveWeaponItem() != null && activeChar.getActiveWeaponItem().getItemId() == 9819)
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_EQUIP_ITEM_DUE_TO_BAD_CONDITION));
					return;
				}
				// Prevent player to remove the weapon on special conditions
				if (activeChar.isCastingNow() || activeChar.isCastingSimultaneouslyNow())
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_USE_ITEM_WHILE_USING_MAGIC));
					return;
				}
				if (activeChar.isMounted())
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_EQUIP_ITEM_DUE_TO_BAD_CONDITION));
					return;
				}
				if (activeChar.isDisarmed())
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_EQUIP_ITEM_DUE_TO_BAD_CONDITION));
					return;
				}

				// Don't allow weapon/shield equipment if a cursed weapon is equiped
				if (activeChar.isCursedWeaponEquipped())
					return;

				// Don't allow other Race to Wear Kamael exclusive Weapons.
				if (!item.isEquipped() && item.getItem() instanceof L2Weapon && !activeChar.isGM())
				{
					L2Weapon wpn = (L2Weapon)item.getItem();

					switch (activeChar.getRace())
					{
						case Kamael:
						{
							switch (wpn.getItemType())
							{
								case NONE:
									activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_EQUIP_ITEM_DUE_TO_BAD_CONDITION));
									return;
							}
							break;
						}
						case Human:
						case Dwarf:
						case Elf:
						case DarkElf:
						case Orc:
						{
							switch (wpn.getItemType())
							{
								case RAPIER:
								case CROSSBOW:
								case ANCIENTSWORD:
									activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_EQUIP_ITEM_DUE_TO_BAD_CONDITION));
									return;
							}
							break;
						}
					}
				}
				break;
			}
			case L2Item.SLOT_CHEST:
			case L2Item.SLOT_BACK:
			case L2Item.SLOT_GLOVES:
			case L2Item.SLOT_FEET:
			case L2Item.SLOT_HEAD:
			case L2Item.SLOT_FULL_ARMOR:
			case L2Item.SLOT_LEGS:
			{
				if (activeChar.getRace() == Race.Kamael &&
						(item.getItem().getItemType() == L2ArmorType.HEAVY
								||item.getItem().getItemType() == L2ArmorType.MAGIC))
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_EQUIP_ITEM_DUE_TO_BAD_CONDITION));
					return;
				}
				break;
			}
			case L2Item.SLOT_DECO:
			{
				if (!item.isEquipped() && activeChar.getInventory().getMaxTalismanCount() == 0)
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_EQUIP_ITEM_DUE_TO_BAD_CONDITION));
					return;
				}
			}
		}

		if (activeChar.isCursedWeaponEquipped() && _itemId == 6408) // Don't allow to put formal wear
			return;

		if (activeChar.isAttackingNow())
		{
			ThreadPoolManager.getInstance().scheduleGeneral( new WeaponEquipTask(item,activeChar), (activeChar.getAttackEndTime()-GameTimeController.getGameTicks())*GameTimeController.MILLIS_IN_TICK);
			return;
		}
		// Equip or unEquip
		if (FortSiegeManager.getInstance().isCombat(item.getItemId()))
			return;	//no message
		else if (activeChar.isCombatFlagEquipped())
			return;

		activeChar.useEquippableItem(item, true);
	}
	else
	{
		L2Weapon weaponItem = activeChar.getActiveWeaponItem();
		int itemid = item.getItemId();
		if (itemid == 4393)
		{
			activeChar.sendPacket(new ShowCalculator(4393));
		}
		else if ((weaponItem != null && weaponItem.getItemType() == L2WeaponType.FISHINGROD)
				&& ((itemid >= 6519 && itemid <= 6527) || (itemid >= 7610 && itemid <= 7613) || (itemid >= 7807 && itemid <= 7809) || (itemid >= 8484 && itemid <= 8486) || (itemid >= 8505 && itemid <= 8513)))
		{
			activeChar.getInventory().setPaperdollItem(Inventory.PAPERDOLL_LHAND, item);
			activeChar.broadcastUserInfo();
			// Send a Server->Client packet ItemList to this L2PcINstance to update left hand equipement
			ItemList il = new ItemList(activeChar, false);
			sendPacket(il);
			return;
		}
		else
		{
			IItemHandler handler = ItemHandler.getInstance().getItemHandler(item.getEtcItem());
			if (handler == null)
			{
				if (Config.DEBUG)
					_log.warning("No item handler registered for item ID " + item.getItemId() + ".");
			}
			else
				handler.useItem(activeChar, item, _ctrlPressed);
		}
	}
	//		}
}

@Override
public String getType()
{
	return _C__14_USEITEM;
}

@Override
protected boolean triggersOnActionRequest()
{
	return !Config.SPAWN_PROTECTION_ALLOWED_ITEMS.contains(_itemId);
}
}

 

i have no idea how to put in the corect way!

txz to reply, but nothing happened

  • 0
Posted

if(TvTEvent.isPlayerParticipant(activeChar.getObjectId())&& TvTEvent.isStarted()&&_itemId == 20399)

return;

 

 

  • 0
Posted

I really apreciate wat u did man! It worked!!! TXZZZZZZZZZZZZZZZZZZZ

 

if (TvTEvent.isPlayerParticipant(activeChar.getObjectId()) && TvTEvent.isStarted() && _itemId == 20399)

{

return;

}

 

:)

 

I'm going to ask you  for a final question...

 

If I want to UNEQUIP this item, when i'm being teletransported to TvTEvent, I would have modify TvTEvent.java right? smth like unequip item when being teletransported to olympiad stadium?

 

 

  • 0
Posted

I  used to "work" with java when I had gracia 1 so as u've noticed Im not an expert in java, but i'm pretty sure that the code might be in TvTEventTeleporter.java

 

I couldnt find the unequip section in olympiad.java :S

 

here's my tvteventteleported.java perhaps i'm wrong cause i dont know too much about java, but i thing it shud be here the uneequip command

/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
* 
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
* 
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.model.entity;

import com.l2jserver.Config;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.model.actor.L2Summon;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.util.Rnd;

public class TvTEventTeleporter implements Runnable
{
/** The instance of the player to teleport */
private L2PcInstance _playerInstance = null;
/** Coordinates of the spot to teleport to */
private int[] _coordinates = new int[3];
/** Admin removed this player from event */
private boolean _adminRemove = false;

/**
 * Initialize the teleporter and start the delayed task<br><br>
 *
 * @param playerInstance as L2PcInstance<br>
 * @param coordinates as int[]<br>
 * @param fastShedule as boolean<br>
 * @param adminRemove as boolean<br>
 */
public TvTEventTeleporter(L2PcInstance playerInstance, int[] coordinates, boolean fastSchedule, boolean adminRemove)
{
	_playerInstance = playerInstance;
	_coordinates = coordinates;
	_adminRemove = adminRemove;

	long delay = (TvTEvent.isStarted() ? Config.TVT_EVENT_RESPAWN_TELEPORT_DELAY : Config.TVT_EVENT_START_LEAVE_TELEPORT_DELAY) * 1000;

	ThreadPoolManager.getInstance().scheduleGeneral(this, fastSchedule ? 0 : delay);
}

/**
 * The task method to teleport the player<br>
 * 1. Unsummon pet if there is one<br>
 * 2. Remove all effects<br>
 * 3. Revive and full heal the player<br>
 * 4. Teleport the player<br>
 * 5. Broadcast status and user info<br><br>
 *
 * @see java.lang.Runnable#run()<br>
 */
public void run()
{
	if (_playerInstance == null)
		return;

	L2Summon summon = _playerInstance.getPet();

	if (summon != null)
		summon.unSummon(_playerInstance);

	if (Config.TVT_EVENT_EFFECTS_REMOVAL == 0
			|| (Config.TVT_EVENT_EFFECTS_REMOVAL == 1 && (_playerInstance.getTeam() == 0 || (_playerInstance.isInDuel() && _playerInstance.getDuelState() != Duel.DUELSTATE_INTERRUPTED))))
		_playerInstance.stopAllEffectsExceptThoseThatLastThroughDeath();

	if (_playerInstance.isInDuel())
		_playerInstance.setDuelState(Duel.DUELSTATE_INTERRUPTED);

	int TvTInstance = TvTEvent.getTvTEventInstance();
	if (TvTInstance != 0)
	{
		if (TvTEvent.isStarted() && !_adminRemove)
		{
			_playerInstance.setInstanceId(TvTInstance);
		}
		else
		{
			_playerInstance.setInstanceId(0);
		}
	}
	else
	{
		_playerInstance.setInstanceId(0);
	}

	_playerInstance.doRevive();

	_playerInstance.teleToLocation( _coordinates[ 0 ] + Rnd.get(101)-50, _coordinates[ 1 ] + Rnd.get(101)-50, _coordinates[ 2 ], false );

	if (TvTEvent.isStarted() && !_adminRemove)
		_playerInstance.setTeam(TvTEvent.getParticipantTeamId(_playerInstance.getObjectId()) + 1);
	else
		_playerInstance.setTeam(0);

	_playerInstance.setCurrentCp(_playerInstance.getMaxCp());
	_playerInstance.setCurrentHp(_playerInstance.getMaxHp());
	_playerInstance.setCurrentMp(_playerInstance.getMaxMp());

	_playerInstance.broadcastStatusUpdate();
	_playerInstance.broadcastUserInfo();
}
}

 

 

Here I found the item restriction unequip for the olympiads, is in L2PcInstance, I tried to add the same for tvtevent but nothing happned =( i'm a total newbie in java I know I know!

 

   	public void checkItemRestriction()
{
	for (int i = 0; i < Inventory.PAPERDOLL_TOTALSLOTS; i++)
	{
		L2ItemInstance equippedItem = getInventory().getPaperdollItem(i);
		if (equippedItem != null && (!equippedItem.getItem().checkCondition(this, this, false)
				|| (isInOlympiadMode() && equippedItem.isOlyRestrictedItem())))
		{
			getInventory().unEquipItemInSlot(i);

			InventoryUpdate iu = new InventoryUpdate();
			iu.addModifiedItem(equippedItem);
			sendPacket(iu);

			SystemMessage sm = null;
			if (equippedItem.getItem().getBodyPart() == L2Item.SLOT_BACK)
			{
				sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLOAK_REMOVED_BECAUSE_ARMOR_SET_REMOVED));
				return;
			}

			if (equippedItem.getEnchantLevel() > 0)
			{
				sm = SystemMessage.getSystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED);
				sm.addNumber(equippedItem.getEnchantLevel());
				sm.addItemName(equippedItem);
			}
			else
			{
				sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISARMED);
				sm.addItemName(equippedItem);
			}
			sendPacket(sm);
		}
	}
}

 

  • 0
Posted

Here it is!!! i got it! ;)

 

I dunno if it right but works!

 

in L2PcInstance

 

for (int i = 0; i < Inventory.PAPERDOLL_TOTALSLOTS; i++)

{

- L2ItemInstance equippedItem = getInventory().getPaperdollItem(i);

- if (equippedItem != null && (!equippedItem.getItem().checkCondition(this, this, false)

- || (isInOlympiadMode() && equippedItem.isOlyRestrictedItem())))

+ L2ItemInstance equippedItem = getInventory().getPaperdollItem(i);

+ if (equippedItem != null && (!equippedItem.getItem().checkCondition(this, this, false)

+ || (isInOlympiadMode() || (TvTEvent.isPlayerParticipant(getObjectId()) && equippedItem.isOlyRestrictedItem()))))

{

getInventory().unEquipItemInSlot(i);

 

And of course I added the item 20399 in restrictions olimpyad.properties

Txz man for helping me and guied me ;)

Guest
This topic is now closed to further replies.


  • Posts

    • Hello, I’m working on decrypting the Init packet that the server sends to the client during login. This packet is treated specially and contains the Blowfish keys used to encrypt and decrypt subsequent packets. Although it isn’t encrypted irreversibly and should be reversible, I haven’t succeeded yet. My goal is to extract the Blowfish key to decrypt certain client packets without disrupting the normal session flow. I can inject a DLL to sniff the packets, and with that I plan to develop a module that extends the client’s functionality. For example, after logging in, this module would capture all the data the client receives (character data, etc.). Additionally, it could listen for real-time server events, enabling integrations with Discord SDKs or other systems, thereby expanding Lineage 2’s capabilities. Init packet(0x00) LoginServer. Currently in the java Cores I checked there is no decode function for this package, only encript.
    • whats password from the archivie ?
    • All that shit are false positives of the vanganth cliext, sources are well and who sell it is a big scammer
    • Information Selling a premium Lineage 2 High Five (L2J) project with active development, available by subscription. Includes Git support and access to compiled or full source code. Ideal for serious server owners seeking stability and performance, uniqueness and well-done features.   General Project Specifications: JDK Version: 23 -> 24 Chronicle: HighFive Structure: Core & Datapack merged into a single project Database: MariaDB Database Driver: HicariCP GIT Website: gitlab.com   Features include (but are not limited to):   1. Tournament Single & Party (Check Youtube Video) 2. Faction (Check Youtube Video) 3. Event Engine (Check Youtube Video) 4. Sell Buff System (Check Youtube Video) 5. Start UP System (Check Youtube Video) 6. User Panel 7. Visual - Dress me System 8. Donate Store 9. Automatic Farm System (Check Youtube Video) 10. Captcha (Anti-BOT) (Check Youtube Video) 11. Auction (Check Youtube Video) 12. Vote (API) 13. Admin Real Time Balance (Check Youtube Video) 14. Achievements (Check Youtube Video) 15. Daily Mission (Check Youtube Video) 16. A.I. Bot (Check Youtube Video) 17. Rebirth 18. Daily Reward  19. Skill Tree - Ability System 20. Craft System 21. Twitch Automatic Reward (Check Youtube Video) 22. Quiz Game (Check Youtube Video) 23. Automatic Item Enchant (Check Youtube Video) 24. Secondary Auth Using Google Authenticator (Check Youtube Video) 25. Gm Shop - Gatekeeper - Scheme Buffer   How to get Access (Payment Subscription): To get Access you either pay monthly subscription to GIT for source or Compiled. Project is currently active and has at least 1-2 commit / day.  Clients in both Compiled & Source subscription can request features or any addon in already existing mods inside discord.   Price per Month (Source) in GIT: 250 Eur Price per Month (Compiled) in GIT: 100 Eur   Contact: To get Access or ask further information join discord  https://discord.gg/gKAsAhJNuq      
  • Topics

×
×
  • Create New...