Jump to content
  • 0

[Help]Enchant System Acis


Question

Posted

I get this code : http://www.maxcheaters.com/forum/index.php?topic=125525.0

but i cant add on acis because its different

 

Index: /Server/GameServer/java/net/sf/l2j/gameserver/clientpackets/RequestEnchantItem.java
===================================================================
--- /Server/GameServer/java/net/sf/l2j/gameserver/clientpackets/RequestEnchantItem.java (revision 2)
+++ /Server/GameServer/java/net/sf/l2j/gameserver/clientpackets/RequestEnchantItem.java (revision 10)
@@ -41,6 +41,9 @@
     protected static final Logger _log = Logger.getLogger(Inventory.class.getName());
     private static final String _C__58_REQUESTENCHANTITEM = "[C] 58 RequestEnchantItem";
-    private static final int[] CRYSTAL_SCROLLS = { 731, 732, 949, 950, 953, 954, 957, 958, 961, 962 };
-
+	private static final int[] ENCHANT_SCROLLS = { 729, 730, 947, 948, 951, 952, 955, 956, 959, 960 };
+	private static final int[] CRYSTAL_SCROLLS = { 731, 732, 949, 950, 953, 954, 957, 958, 961, 962 };
+	private static final int[] BLESSED_SCROLLS = { 6569, 6570, 6571, 6572, 6573, 6574, 6575, 6576, 6577, 6578 };
+
+    
     private int _objectId;

@@ -57,4 +60,12 @@
         if (activeChar == null || _objectId == 0) return;

+        		if (activeChar.isProcessingTransaction())
+        			{
+        				activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION));
+        				activeChar.setActiveEnchantItem(null);
+        				return;
+        			}
+
+        
         L2ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId);
         L2ItemInstance scroll = activeChar.getActiveEnchantItem();
@@ -179,27 +190,93 @@
         }

-        // SystemMessage sm = new SystemMessage(SystemMessageId.ENCHANT_SCROLL_CANCELLED);
-        // activeChar.sendPacket(sm);
-
-        SystemMessage sm;
-
-        int chance = 0;
-        int maxEnchantLevel = 0;
-
-        if (item.getItem().getType2() == L2Item.TYPE2_WEAPON)
-        {
-	        chance = Config.ENCHANT_CHANCE_WEAPON;
-	        maxEnchantLevel = Config.ENCHANT_MAX_WEAPON;
-        }
-        else if (item.getItem().getType2() == L2Item.TYPE2_SHIELD_ARMOR)
-        {
-	        chance = Config.ENCHANT_CHANCE_ARMOR;
-	        maxEnchantLevel = Config.ENCHANT_MAX_ARMOR;
-        }
-        else if (item.getItem().getType2() == L2Item.TYPE2_ACCESSORY)
-        {
-        	chance = Config.ENCHANT_CHANCE_JEWELRY;
-        	maxEnchantLevel = Config.ENCHANT_MAX_JEWELRY;
-        }
+		// SystemMessage sm = new
+		// SystemMessage(SystemMessageId.ENCHANT_SCROLL_CANCELLED);
+		// activeChar.sendPacket(sm);
+		SystemMessage sm;
+		int chance = 0;
+		int maxEnchantLevel = 0;
+		if (item.getItem().getType2() == L2Item.TYPE2_WEAPON)
+		{
+			maxEnchantLevel = Config.ENCHANT_MAX_WEAPON;
+			for (int scrollId : ENCHANT_SCROLLS)
+			{
+				if (scroll.getItemId() == scrollId)
+				{
+					chance = Config.ENCHANT_CHANCE_WEAPON;
+					break;
+				}
+			}
+			for (int scrollId : CRYSTAL_SCROLLS)
+			{
+				if (scroll.getItemId() == scrollId)
+				{
+					chance = Config.ENCHANT_CHANCE_WEAPON_CRYSTAL;
+					;
+					break;
+				}
+			}
+			for (int scrollId : BLESSED_SCROLLS)
+			{
+				if (scroll.getItemId() == scrollId)
+				{
+					chance = Config.ENCHANT_CHANCE_WEAPON_BLESSED;
+					break;
+				}
+			}
+		} else if (item.getItem().getType2() == L2Item.TYPE2_SHIELD_ARMOR)
+		{
+			maxEnchantLevel = Config.ENCHANT_MAX_ARMOR;
+			for (int scrollId : ENCHANT_SCROLLS)
+			{
+				if (scroll.getItemId() == scrollId)
+				{
+					chance = Config.ENCHANT_CHANCE_ARMOR;
+					break;
+				}
+			}
+			for (int scrollId : CRYSTAL_SCROLLS)
+			{
+				if (scroll.getItemId() == scrollId)
+				{
+					chance = Config.ENCHANT_CHANCE_ARMOR_CRYSTAL;
+					break;
+				}
+			}
+			for (int scrollId : BLESSED_SCROLLS)
+			{
+				if (scroll.getItemId() == scrollId)
+				{
+					chance = Config.ENCHANT_CHANCE_ARMOR_BLESSED;
+					break;
+				}
+			}
+		} else if (item.getItem().getType2() == L2Item.TYPE2_ACCESSORY)
+		{
+			maxEnchantLevel = Config.ENCHANT_MAX_JEWELRY;
+			for (int scrollId : ENCHANT_SCROLLS)
+			{
+				if (scroll.getItemId() == scrollId)
+				{
+					chance = Config.ENCHANT_CHANCE_JEWELRY;
+					break;
+				}
+			}
+			for (int scrollId : CRYSTAL_SCROLLS)
+			{
+				if (scroll.getItemId() == scrollId)
+				{
+					chance = Config.ENCHANT_CHANCE_JEWELRY_CRYSTAL;
+					break;
+				}
+			}
+			for (int scrollId : BLESSED_SCROLLS)
+			{
+				if (scroll.getItemId() == scrollId)
+				{
+					chance = Config.ENCHANT_CHANCE_JEWELRY_BLESSED;
+					break;
+				}
+			}
+		}

         if (item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX

15 answers to this question

Recommended Posts

  • 0
Posted

i cannot add the request enchant item.java because its different :/ and i got complicated

 

Use standard code and make it the same way, just if(isBlessed) or so. It's not hard :)

 

Edit: Bah, it's for each enchant, so it's goin to be a bit different. Anyway, on aCis custom section it's already shared :)

  • 0
Posted

Use standard code and make it the same way, just if(isBlessed) or so. It's not hard :)

 

Edit: Bah, it's for each enchant, so it's goin to be a bit different. Anyway, on aCis custom section it's already shared :)

i am newbie and i dont understand so well what u tell me.

 

  • 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 net.sf.l2j.gameserver.network.clientpackets;

import net.sf.l2j.Config;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.network.serverpackets.EnchantResult;
import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
import net.sf.l2j.gameserver.network.serverpackets.ItemList;
import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
import net.sf.l2j.gameserver.util.Util;
import net.sf.l2j.util.Rnd;

public final class RequestEnchantItem extends AbstractEnchantPacket
{
private int _objectId = 0;

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

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

	if (!activeChar.isOnline() || getClient().isDetached())
	{
		activeChar.setActiveEnchantItem(null);
		return;
	}

	if (activeChar.isProcessingTransaction() || activeChar.isInStoreMode())
	{
		activeChar.sendPacket(SystemMessageId.CANNOT_ENCHANT_WHILE_STORE);
		activeChar.setActiveEnchantItem(null);
		activeChar.sendPacket(EnchantResult.CANCELLED);
		return;
	}

	L2ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId);
	L2ItemInstance scroll = activeChar.getActiveEnchantItem();

	if (item == null || scroll == null)
	{
		activeChar.setActiveEnchantItem(null);
		activeChar.sendPacket(SystemMessageId.ENCHANT_SCROLL_CANCELLED);
		activeChar.sendPacket(EnchantResult.CANCELLED);
		return;
	}

	// template for scroll
	EnchantScroll scrollTemplate = getEnchantScroll(scroll);
	if (scrollTemplate == null)
		return;

	// first validation check
	if (!scrollTemplate.isValid(item) || !isEnchantable(item))
	{
		activeChar.sendPacket(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION);
		activeChar.setActiveEnchantItem(null);
		activeChar.sendPacket(EnchantResult.CANCELLED);
		return;
	}

	// attempting to destroy scroll
	scroll = activeChar.getInventory().destroyItem("Enchant", scroll.getObjectId(), 1, activeChar, item);
	if (scroll == null)
	{
		activeChar.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS);
		Util.handleIllegalPlayerAction(activeChar, activeChar.getName() + " tried to enchant without scroll.", Config.DEFAULT_PUNISH);
		activeChar.setActiveEnchantItem(null);
		activeChar.sendPacket(EnchantResult.CANCELLED);
		return;
	}

	if (activeChar.getActiveTradeList() != null)
	{
		activeChar.cancelActiveTrade();
		activeChar.sendPacket(SystemMessageId.TRADE_ATTEMPT_FAILED);
		return;
	}

	synchronized (item)
	{
		double chance = scrollTemplate.getChance(item);

		// last validation check
		if (item.getOwnerId() != activeChar.getObjectId() || !isEnchantable(item) || chance < 0)
		{
			activeChar.sendPacket(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION);
			activeChar.setActiveEnchantItem(null);
			activeChar.sendPacket(EnchantResult.CANCELLED);
			return;
		}

		// success
		if (Rnd.get() < chance)
		{
			// announce the success
			SystemMessage sm;

			if (item.getEnchantLevel() == 0)
			{
				sm = SystemMessage.getSystemMessage(SystemMessageId.S1_SUCCESSFULLY_ENCHANTED);
				sm.addItemName(item.getItemId());
				activeChar.sendPacket(sm);
			}
			else
			{
				sm = SystemMessage.getSystemMessage(SystemMessageId.S1_S2_SUCCESSFULLY_ENCHANTED);
				sm.addNumber(item.getEnchantLevel());
				sm.addItemName(item.getItemId());
				activeChar.sendPacket(sm);
			}

			item.setEnchantLevel(item.getEnchantLevel() + 1);
			item.updateDatabase();
			activeChar.sendPacket(EnchantResult.SUCCESS);
		}
		else
		{
			// unequip item on enchant failure to avoid item skills stack
			if (item.isEquipped())
			{
				if (item.getEnchantLevel() > 0)
				{
					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED);
					sm.addNumber(item.getEnchantLevel());
					sm.addItemName(item.getItemId());
					activeChar.sendPacket(sm);
				}
				else
				{
					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISARMED);
					sm.addItemName(item.getItemId());
					activeChar.sendPacket(sm);
				}

				L2ItemInstance[] unequiped = activeChar.getInventory().unEquipItemInSlotAndRecord(item.getLocationSlot());
				InventoryUpdate iu = new InventoryUpdate();
				for (L2ItemInstance itm : unequiped)
					iu.addModifiedItem(itm);

				activeChar.sendPacket(iu);
				activeChar.broadcastUserInfo();
			}

			if (scrollTemplate.isBlessed())
			{
				// blessed enchant - clear enchant value
				activeChar.sendPacket(SystemMessageId.BLESSED_ENCHANT_FAILED);

				item.setEnchantLevel(0);
				item.updateDatabase();
				activeChar.sendPacket(EnchantResult.UNSUCCESS);
			}
			else
			{
				// enchant failed, destroy item
				int crystalId = item.getItem().getCrystalItemId();
				int count = item.getCrystalCount() - (item.getItem().getCrystalCount() + 1) / 2;
				if (count < 1)
					count = 1;

				L2ItemInstance destroyItem = activeChar.getInventory().destroyItem("Enchant", item, activeChar, null);
				if (destroyItem == null)
				{
					// unable to destroy item, cheater ?
					Util.handleIllegalPlayerAction(activeChar, "Unable to delete item on enchant failure from player " + activeChar.getName() + ", possible cheater !", Config.DEFAULT_PUNISH);
					activeChar.setActiveEnchantItem(null);
					activeChar.sendPacket(EnchantResult.CANCELLED);
					return;
				}

				L2ItemInstance crystals = null;
				if (crystalId != 0)
				{
					crystals = activeChar.getInventory().addItem("Enchant", crystalId, count, activeChar, destroyItem);

					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S);
					sm.addItemName(crystals.getItemId());
					sm.addItemNumber(count);
					activeChar.sendPacket(sm);
				}

				if (!Config.FORCE_INVENTORY_UPDATE)
				{
					InventoryUpdate iu = new InventoryUpdate();
					if (destroyItem.getCount() == 0)
						iu.addRemovedItem(destroyItem);
					else
						iu.addModifiedItem(destroyItem);

					if (crystals != null)
						iu.addItem(crystals);

					activeChar.sendPacket(iu);
				}
				else
					activeChar.sendPacket(new ItemList(activeChar, true));

				L2World world = L2World.getInstance();
				world.removeObject(destroyItem);
				if (crystalId == 0)
					activeChar.sendPacket(EnchantResult.UNK_RESULT_4);
				else
					activeChar.sendPacket(EnchantResult.UNK_RESULT_1);
			}
		}

		StatusUpdate su = new StatusUpdate(activeChar);
		su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad());
		activeChar.sendPacket(su);

		activeChar.sendPacket(new ItemList(activeChar, false));
		activeChar.broadcastUserInfo();
		activeChar.setActiveEnchantItem(null);
	}
}
}

here is the original

  • 0
Posted

my friend i am asking for help if i could do this myself i will . thats the reason i am asking help here

if u want somebody to do it for u, make topic in marketplace and if u dont have money for such things just read guides and tell us in which part u are stuck, what errors u have got.

  • 0
Posted

if u want somebody to do it for u, make topic in marketplace and if u dont have money for such things just read guides and tell us in which part u are stuck, what errors u have got.

i dont understand how to do it cause its differnt. example :

+	private static final int[] ENCHANT_SCROLLS = { 729, 730, 947, 948, 951, 952, 955, 956, 959, 960 };
+	private static final int[] CRYSTAL_SCROLLS = { 731, 732, 949, 950, 953, 954, 957, 958, 961, 962 };
+	private static final int[] BLESSED_SCROLLS = { 6569, 6570, 6571, 6572, 6573, 6574, 6575, 6576, 6577, 6578 };
+
+   

where i have to add this there isnt anywhere this line : private static final String _C__58_REQUESTENCHANTITEM = "[C] 58 RequestEnchantItem";

  • 0
Posted

add it at the start of the class

for example your class can look like this:

package blablabla;
import blablabla

public class RequestEnchantItem
{//class starts here
//Its Place where class starts, so its the best place to add variables like ENCHANT_SCROLLS etc. Those variables will be visible in whole class.

public void getEnchant(int bla)
{//Method starts here
//Its the method, if u add variable here, it will be visible only inside this method
}//Method ends here
}//class ends here

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

    • DEVELOPMENT UPDATE #4 ACCOUNT AND CHARACTER SECURITY   Vaelor includes several protection layers for accounts and characters. A personal PIN protects access to the character. PIN verification is also required for sensitive character actions. Incorrect attempts are counted across the protected actions. Repeated incorrect attempts trigger an automatic security response. Computer Lock can restrict access to an authorized device. Hardware identification is used for the game-window limit. Hardware bans are checked before protected character operations. Security settings are available through Alt+B › My Character.   These systems work alongside the normal account credentials and are intended to reduce the damage caused by shared or compromised login information.     ━━━━━━━━━━━━━━━━━━━━━━   Open Beta is currently running.   Create account: https://l2vaelor.com/register Download: https://l2vaelor.com/#download Discord: https://discord.gg/qMgPxH2fd4
    • Some things that I've been working on lately. Client update A new system message window sits right above the chat. Damage, XP, pickups and system messages get their own box, so your chat stays clean. You can switch it off in the chat filter. Screenshots are now HQ and saved as PNG in dated folders. A bit of improvement from old bmp. Fixed a graphics glitch, cursor issues and the taskbar on Windows 11. Closer to retail C1 Buffs and debuffs now disappear on death, as on the original server. Clan wars last unlimited until one side surrenders. A stun is no longer broken by the hit that caused it, and Lucky no longer protects players with PKs. Doors and line of sight were checked against the original game. Sieges Castle walls can only be damaged by a Siege Golem. Players, other summons and skills cannot damage them. This is C1 mechanic so I will make a poll regarding this. Building Headquarters can be interrupted by damage, so protect your clan leader. Queen Ant and pets When Queen Ant spawns, everyone in her nest is teleported out, as on retail. Pets and servitors count as humanoid, as in C1. Original C1 bugs fixed Monsters hesitating instead of chasing you. They now finish the swing and then follow. Monsters are no longer moving while asleep or rooted. The Composite Armor set and Decrease Weight having no effect on weight fixed Anti-bot We've started building our own anti-bot system into the server itself. Bots aren't really welcome.
    • Version 0.3.0 - NPC rendering and npcpos.txt editing https://res.cloudinary.com/h4p9pew6/video/upload/v1792026335/npc-spawns-editor.mp4   A new NPC Spawns tab. Choose an L2OFF script folder and Cruma shows the server's spawns right in the game world: - Every spawn zone is a colored outline on the geodata. From high up you also see the zones far below. - NPCs stand where the server puts them. Random spawns use the same logic as the server. - Editing: move a whole zone or its corners, add and remove corners; move and turn NPCs; change the NPC, count, respawn time, AI and its parameters; add and delete zones, makers and NPCs; rename zones and makers and every reference to a zone is updated; new zones are named after the nearest zone (for example, benon_1725_07 next to benon_1725_06). - Actions: click an NPC or a zone to open its maker; double-click to start editing; search for NPCs; the focus button flies the camera to an NPC; the View menu can hide zone outlines and keep only the NPCs. - Each client remembers its own script folder, the same way it remembers its geodata folder. - Saving: only the edited lines of npcpos.txt change; before writing, you see a diff of the changes (maximum_npc 4 -> 3); every version is kept as a dated backup.   Improvements - UI changes: small fixes and a wider tool tab.   Download Link: 0.3.0
    • Why not, if you're interested I will post an update
    • UPD: New features and improvements
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..