Jump to content
  • 0

Help fix ScrollDonate code for acis 388


Question

Posted

Here's the code.

package net.sf.l2j.gameserver.handler.itemhandlers;

import net.sf.l2j.gameserver.data.SkillTable;
import net.sf.l2j.gameserver.handler.IItemHandler;
import net.sf.l2j.gameserver.handler.ItemHandler;
import net.sf.l2j.gameserver.model.actor.Playable;
import net.sf.l2j.gameserver.model.actor.Player;
import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;

import java.util.HashMap;

public class DonateScrolls implements IItemHandler
{
    private final static HashMap<Integer, Integer[]> SCROLLS = new HashMap<Integer, Integer[]>();
    private static int[] ITEM_IDS = null;

    public DonateScrolls()
    {
        /**
		  * SCROLLS.put(item_id, new Integer[] { id_buffa, buffa level, id_skilla_animation, animation duration(ms)), take the item(1 yes, 0 no)) });
          */
        SCROLLS.put(11986, new Integer[] { 8001, 1, 7038, 1, 1 });
        SCROLLS.put(11987, new Integer[] { 8002, 1, 7038, 1, 1 });
        SCROLLS.put(11988, new Integer[] { 8003, 1, 7038, 1, 1 });
        SCROLLS.put(11989, new Integer[] { 8004, 1, 7038, 1, 1 });
        SCROLLS.put(11469, new Integer[] { 11510, 1, 7038, 1, 0 });
        SCROLLS.put(11470, new Integer[] { 11510, 2, 7038, 1, 0 });
        SCROLLS.put(11471, new Integer[] { 11510, 3, 7038, 1, 0 });
        SCROLLS.put(11472, new Integer[] { 11510, 4, 7038, 1, 0 });
        SCROLLS.put(11473, new Integer[] { 11510, 5, 7038, 1, 0 });
        SCROLLS.put(11474, new Integer[] { 11515, 1, 7038, 1, 0 });
        SCROLLS.put(11475, new Integer[] { 11515, 2, 7038, 1, 0 });
        SCROLLS.put(11476, new Integer[] { 11515, 3, 7038, 1, 0 });
        SCROLLS.put(11477, new Integer[] { 11515, 4, 7038, 1, 0 });
        SCROLLS.put(11478, new Integer[] { 11515, 5, 7038, 1, 0 });
        SCROLLS.put(11479, new Integer[] { 11520, 1, 7038, 1, 0 });
        SCROLLS.put(11480, new Integer[] { 11520, 2, 7038, 1, 0 });
        SCROLLS.put(11481, new Integer[] { 11520, 3, 7038, 1, 0 });
        SCROLLS.put(11482, new Integer[] { 11520, 4, 7038, 1, 0 });
        SCROLLS.put(11483, new Integer[] { 11520, 5, 7038, 1, 0 });
        SCROLLS.put(11484, new Integer[] { 11525, 1, 7038, 1, 0 });
        SCROLLS.put(11485, new Integer[] { 11525, 2, 7038, 1, 0 });
        SCROLLS.put(11486, new Integer[] { 11525, 3, 7038, 1, 0 });
        SCROLLS.put(11487, new Integer[] { 11525, 4, 7038, 1, 0 });
        SCROLLS.put(11488, new Integer[] { 11525, 5, 7038, 1, 0 });
        SCROLLS.put(11489, new Integer[] { 11530, 1, 7038, 1, 0 });
        SCROLLS.put(11490, new Integer[] { 11530, 2, 7038, 1, 0 });
        SCROLLS.put(11491, new Integer[] { 11530, 3, 7038, 1, 0 });
        SCROLLS.put(11492, new Integer[] { 11530, 4, 7038, 1, 0 });
        SCROLLS.put(11493, new Integer[] { 11530, 5, 7038, 1, 0 });
        SCROLLS.put(11494, new Integer[] { 11535, 1, 7038, 1, 0 });
        SCROLLS.put(11495, new Integer[] { 11535, 2, 7038, 1, 0 });
        SCROLLS.put(11496, new Integer[] { 11535, 3, 7038, 1, 0 });
        SCROLLS.put(11497, new Integer[] { 11535, 4, 7038, 1, 0 });
        SCROLLS.put(11498, new Integer[] { 11535, 5, 7038, 1, 0 });
        SCROLLS.put(11499, new Integer[] { 11540, 1, 7038, 1, 0 });
        SCROLLS.put(11500, new Integer[] { 11540, 2, 7038, 1, 0 });
        SCROLLS.put(11501, new Integer[] { 11540, 3, 7038, 1, 0 });
        SCROLLS.put(11502, new Integer[] { 11540, 4, 7038, 1, 0 });
        SCROLLS.put(11503, new Integer[] { 11540, 5, 7038, 1, 0 });

        //
        Integer[] tmp_ids = (Integer[]) SCROLLS.keySet().toArray(new Integer[SCROLLS.size()]);
        ITEM_IDS = toIntArray(tmp_ids);
        tmp_ids = null;
        ItemHandler.getInstance().getHandler(null);
    }

    public static void main (String... arguments )
    {
        new DonateScrolls();
    }

    public void useItem(Playable playable, ItemInstance item, boolean forceUse)
    {
        if (playable instanceof Player)
            return;

        Player player = (Player) playable;
        if (player.isAllSkillsDisabled())
        {
            player.sendMessage("");
            return;
        }

        if (player.isInOlympiadMode())
        {
            player.sendPacket(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT);
            player.sendMessage("");
            return;
        }

        Integer[] data = SCROLLS.get(item.getItemId());
        if(data != null)
        {
            player.stopSkillEffects(data[0]);
            SkillTable.getInstance().getInfo(data[0], data[1]).getEffects(player, player);
            player.broadcastPacket(new MagicSkillUse(player, player, data[2], 1, data[3], 0));
            if (data[4] == 1) {
                player.destroyItem("Consume", item.getObjectId(), 1, null, false);
            }
        }
    }

    private int[] toIntArray(Integer[] arr)
    {
        int[] ret = new int[arr.length];
        int i = 0;
        for (Integer e : arr)
            ret[i++] = e.intValue();
        return ret;
    }

    public int[] getItemIds()
    {
        return ITEM_IDS;
    }
}

Here are some xml items

should remain in inventory
	<item id="11469" type="EtcItem" name="MIGHT1">
		<set name="default_action" val="capsule" />
		<set name="material" val="PAPER" />
		<set name="weight" val="100" />
		<set name="is_stackable" val="true" />
		<set name="is_oly_restricted" val="true" />
		<set name="handler" val="DonateScrolls" />
		<set name="item_skill" val="11510-1" />
	</item>
this one should disappear.
	<item id="11987" type="EtcItem" name="Speed">
		<set name="default_action" val="capsule" />
		<set name="material" val="PAPER" />
		<set name="weight" val="100" />
		<set name="is_stackable" val="true" />
		<set name="is_oly_restricted" val="true" />
		<set name="handler" val="DonateScrolls" />
		<set name="item_skill" val="8002-1" />
	</item>

 

This code must make the object constant which lies in the inventory and, when using it, imposes a buffer if the value 0 is set in the code. If the value is set to 1, the item puts a buffer and disappears. How to make the code work. You need help.

4 answers to this question

Recommended Posts

  • 0
Posted

If i am not wrong,  you want player use that scrolls like others. So copy xml from might buff for exemple, and make a second xml skill for scroll with scroll image. Or simple edit with status existing scrolls.

  • 0
Posted (edited)

Copy xml from original scroll, if you make that xml for scroll. 
open L2-file edit and search in ItemName-e.dat "Scroll of Might" And copy or edit that xml. Just change Item_Skill with your skill id.

Also check this line if you have. i don;t work with aCis.

 


 <set name="default_action" val="SKILL_REDUCE" />

 

Edited by 0flee

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..