Jump to content
  • 0

[Help] Edit Compressed soulshot pack.


Question

Posted

I was going to try to create my own compressed pack to open into a list of possible items. I didn't know where to start so I thought I would edit some that already exist. I wasn't really sure how to do this so I thought I would post what I got to see if I'm on the right track. Don't want to mess up the file and my source code.

Current code from CompShotPacks.java

public void useItem(L2PlayableInstance playable, L2ItemInstance item)

{

if (!(playable instanceof L2PcInstance))

return;

L2PcInstance activeChar = (L2PcInstance) playable;

 

int itemId = item.getItemId();

int itemToCreateId = 0;

int amount = 0; // default regular pack

 

if (itemId >= 5134 && itemId <= 5139) // SS

{

if (itemId == 5134) // No Grade

itemToCreateId = 1835;

else

itemToCreateId = itemId - 3672;

 

amount = 300;

}

else if (itemId >= 5250 && itemId <= 5255) // Greater SS

{

if (itemId == 5250) // No Grade

itemToCreateId = 1835;

else

itemToCreateId = itemId - 3788;

 

amount = 1000;

}

else if (itemId >= 5140 && itemId <= 5145) // SpS

{

}

else if (itemId >= 5256 && itemId <= 5261) // Greater SpS

{

}

What I want to do is add a list of possible items that have a random chance to open and a random min-max amount. This is my attempt I don't know the code to do random min-max amount yet.

public void useItem(L2PlayableInstance playable, L2ItemInstance item)

{

if (!(playable instanceof L2PcInstance))

return;

L2PcInstance activeChar = (L2PcInstance) playable;

 

int itemId = item.getItemId();

int itemToCreateId = 0;

int amount = 0; // default regular pack

 

if (itemId >= 5134 && itemId <= 5139) // SS

{

if (itemId == 5134) // No Grade

                          (Rnd.get(100) > 20)

itemToCreateId = 7580;

amount = 1;

                          (Rnd.get(100) > 30)

itemToCreateId = 6847;

amount = 1;

}

Hopefully it would open and give you a 20% chance to recieve 1 of item 7580 and 30% chance to recieve 1 of 6847. This pack doesn't need random amount because its for recipes.

But if I edit the next pack I want it to open up into mats then I would need the random min-max amount. Which I don't know how to add so I can set the min amount and max amount right there.

Example:

Open pack,

(Rnd.get(100) >20)

itemToCreateId = 57;

(Rnd.get(3 - 5) (Get Min 3 or max of 5)

I don't know what the min max is so I just took a guess.

 

 

 

15 answers to this question

Recommended Posts

  • 0
Posted

I am glad to see that you tried to do something and you didn't come without any efforts.

The easiest method is to create a integer and define it with Rnd values.

 

So We will have

public void useItem(L2PlayableInstance playable, L2ItemInstance item)
{
	if (!(playable instanceof L2PcInstance))
		return;
	L2PcInstance activeChar = (L2PcInstance) playable;

	int itemId = item.getItemId();
	int itemToCreateId = 0;

	boolean chance20 = 20 > Rnd.get(100), chance30 = 30 > Rnd.get(100);
	int amount = 0;

	if (itemId >= 5134 && itemId <= 5139) // SS
	{
		if (itemId == 5134 && chance20) // No Grade
		{
			itemToCreateId = 7580;
			amount = Rnd.get(3, 5);
		}
		if (itemId == 5135 && chance30)
		{
			itemToCreateId = 6847;
			amount = Rnd.get(3, 5);
		}
	}
}

 

If you have more than 2-3 items make a private method to get the chance ...

 

-Cheers

  • 0
Posted

Yea I will be having lots more items to have a chance to get when the pack opens. So I will need to try to find that out. Thank you for your help.

I'm home right now, Let me code it for ya ..

 

public void useItem(L2PlayableInstance playable, L2ItemInstance item)
{
	if (!(playable instanceof L2PcInstance))
		return;
	L2PcInstance activeChar = (L2PcInstance) playable;

	int itemId = item.getItemId();
	int itemToCreateId = 0, amount = 0;

	if (itemId >= 5134 && itemId <= 5139) // SS
	{
		if (itemId == 5134 && getChance(20)) // No Grade
		{
			itemToCreateId = 7580;
			amount = Rnd.get(3, 5);
		}
		if (itemId == 5135 && getChance(30))
		{
			itemToCreateId = 6847;
			amount = Rnd.get(3, 5);
		}
	}
}

 

private boolean getChance(int i)
{
return i > Rnd.get(100);
}

  • 0
Posted

Thank you, This is the whole .java and I wanted to make sure I entered it correct. Because Eclipse is giving me an error saying Rnd cannot be resolved.

public class CompShotPacks implements IItemHandler

{

private static final int[] ITEM_IDS =

{

5134, 5135, 5136, 5137, 5138, 5139, /**/5250, 5251, 5252, 5253, 5254, 5255 // SS

// 5140, 5141, 5142, 5143, 5144, 5145, /**/ 5256, 5257, 5258, 5259, 5260, 5261, // SpS

// 5146, 5147, 5148, 5149, 5150, 5151, /**/ 5262, 5263, 5264, 5265, 5266, 5267 // BSpS

};

private boolean getChance(int i)

{

return i > Rnd.get(100);

}

 

public void useItem(L2PlayableInstance playable, L2ItemInstance item)

{

if (!(playable instanceof L2PcInstance))

return;

L2PcInstance activeChar = (L2PcInstance) playable;

 

int itemId = item.getItemId();

int itemToCreateId = 0;

 

boolean chance20 = 20 > Rnd.get(100), chance30 = 30 > Rnd.get(100);

int amount = 0; // default regular pack

 

if (itemId >= 5134 && itemId <= 5139) // SS

{

if (itemId == 5134 && chance20) // No Grade

itemToCreateId = 7580;

            amount = Rnd.get(1, 2);

}

if (itemId == 5135 && chance30)

{

itemToCreateId = 6847;

amount = Rnd.get(1, 2);

}

activeChar.getInventory().destroyItem("Extract", item, activeChar, null);

activeChar.getInventory().addItem("Extract", itemToCreateId, amount, activeChar, item);

 

SystemMessage sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);

sm.addItemName(itemToCreateId);

sm.addNumber(amount);

activeChar.sendPacket(sm);

 

ItemList playerUI = new ItemList(activeChar, false);

activeChar.sendPacket(playerUI);

}

 

public int[] getItemIds()

{

return ITEM_IDS;

}

}

  • 0
Posted

Sorry for double post. Would it be easier to create my own pack items? I need 4 in total for now. These are the list of items I need to have a chance to open in the first pack. the amount of 1 for these is fine.

 

Pack 1: Random chance to get these items.

6861

6863

6853

6855

6857

6859

6865

6867

6869

6871

6873

6875

6877

6879

6881

6883

6885

6887

6889

6891

6893

6895

6897

6899

7580

6847

6849

6851

 

Pack 2 random chance to get these: Random amount 1-5

Sealed Tateossian Earring Part

Sealed Tateossian Ring Gem

Sealed Tateossian Necklace Chain

 

Sealed Imperial Crusader Breastplate Part

Sealed Imperial Crusader Gaiters Pattern

Sealed Imperial Crusader Gauntlets Design

Sealed Imperial Crusader Boots Design

Sealed Imperial Crusader Helmet Pattern

Sealed Imperial Crusader Shield Part

 

Sealed Draconic Leather Armor Part

Sealed Draconic Leather Gloves Fabric

Sealed Draconic Leather Boots Design

Sealed Draconic Leather Helmet Pattern

 

Sealed Major Arcana Robe Part

Sealed Major Arcana Gloves fabric

Sealed Major Arcana Boots Design

Sealed Major Arcana Circlet Pattern

 

Forgotten Blade Edge

Basalt Battlehammer Head

Imperial Staff Head

Angel Slayer Blade

Shining Bow Shaft

Dragon Hunter Axe Blade

Saint Spear Blade

Demon Splinter Blade

Heavens Divider Edge

Draconic Bow Shaft

Arcana Mace Head

 

Pack 3 random chance to get these items: Random amount 1-3

Arcsmith's Anvil

Warsmith's Mold

Leolin's Mold

Maestro Mold

Warsmith's Holder

 

Pack 4 random chance to get these items: Random amount 1-5

Compound Braid

Durable Metal Plate

Enria

Metallic Fiber

Varnish of Purity

Thons

Oriharukon

Coarse Bone Powder

Synthetic Cokes

Mithril Alloy

Asofe

 

I will be getting the item codes for those later but this is just to show you want I'm trying to do.

  • 0
Posted
package net.iplay.gameserver.handler.itemhandlers;

import net.iplay.gameserver.handler.IItemHandler;
import net.iplay.gameserver.model.actor.instance.L2ItemInstance;
import net.iplay.gameserver.model.actor.instance.L2PcInstance;
import net.iplay.gameserver.model.actor.instance.L2PlayableInstance;
import net.iplay.gameserver.network.SystemMessageId;
import net.iplay.gameserver.network.serverpackets.ItemList;
import net.iplay.gameserver.network.serverpackets.SystemMessage;
import net.iplay.util.Rnd;

public class YourCustomClass implements IItemHandler
{
private static final int[] ITEM_IDS =
{ 
	1,2 //packs ids
};

private int[] Pack1 = {6847,6849,6851,6853,6855,6857,6859,6861,6863,6865,6867,6869,6871,6873,6875,6877,6879,6881,6883,6885,6887,6889,6891,6893,6895,6897,6899,7580};
private int[] Pack2 = { /**anothers ids*/};

public void useItem(L2PlayableInstance playable, L2ItemInstance item)
{
	if (!(playable instanceof L2PcInstance))
		return;
	L2PcInstance activeChar = (L2PcInstance) playable;

	int itemId = item.getItemId();
	int itemToCreateId = 0;
	int amount = 0;

	switch(itemId)
	{
		case 1: //first pack id
		{
			if(getChance(30))
			{
				itemToCreateId = Pack1[Rnd.get(Pack1.length)];
				amount = 1;
			}
			break;
		}
		case 2: //second pack id
		{
			if(getChance(Rnd.get(30, 70))) // random chance
			{
				itemToCreateId = Pack2[Rnd.get(Pack2.length)];
				amount = Rnd.get(1, 5);
			}
			break;
		}
	}

	activeChar.getInventory().destroyItem("Extract", item, activeChar, null);
	activeChar.getInventory().addItem("Extract", itemToCreateId, amount, activeChar, item);

	SystemMessage sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
	sm.addItemName(itemToCreateId);
	sm.addNumber(amount);
	activeChar.sendPacket(sm);

	ItemList playerUI = new ItemList(activeChar, false);
	activeChar.sendPacket(playerUI);
}

private boolean getChance(int i)
{
	return i > Rnd.get(100);
}

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

  • 0
Posted

Maybe I did this wrong but I used 4 ids from the compressed soulshot pack, when I open them I still get soulshots.

package lt.equal.gameserver.handler.itemhandlers;

 

import lt.equal.gameserver.handler.IItemHandler;

import lt.equal.gameserver.model.L2ItemInstance;

import lt.equal.gameserver.model.actor.instance.L2PcInstance;

import lt.equal.gameserver.model.actor.instance.L2PlayableInstance;

import lt.equal.gameserver.network.SystemMessageId;

import lt.equal.gameserver.network.serverpackets.ItemList;

import lt.equal.gameserver.network.serverpackets.SystemMessage;

import lt.equal.util.Rnd;

 

public class CompShotPacks implements IItemHandler

{

private static final int[] ITEM_IDS =

{

5134, 5135, 5136, 5137 //packs ids

};

 

private int[] Pack1 = {6847,6849,6851,6853,6855,6857,6859,6861,6863,6865,6867,6869,6871,6873,6875,6877,6879,6881,6883,6885,6887,6889,6891,6893,6895,6897,6899,7580};

private int[] Pack2 = {1889,5550,4042,1895,1887,4044,1893,1881,1888,1890,4043};

private int[] Pack3 = {5553,5552,5551,4048,5554};

private int[] Pack4 = {6698,6699,6700,6701,6702,6703,6704,6706,6705,6707,6708,6709,6710,6711,6712,6713,6714,6688,6689,6690,6691,6692,6693,6694,6695,6696,7579,6697};

 

public void useItem(L2PlayableInstance playable, L2ItemInstance item)

{

if (!(playable instanceof L2PcInstance))

return;

L2PcInstance activeChar = (L2PcInstance) playable;

 

int itemId = item.getItemId();

int itemToCreateId = 0;

int amount = 0;

 

switch(itemId)

{

case 1: //first pack id

{

if(getChance(30))

{

itemToCreateId = Pack1[Rnd.get(Pack1.length)];

amount = 1;

}

break;

}

case 2: //second pack id

{

if(getChance(Rnd.get(30, 70))) // random chance

{

itemToCreateId = Pack2[Rnd.get(Pack2.length)];

amount = Rnd.get(1, 5);

}

break;

}

case 3: //third pack id

{

if(getChance(Rnd.get(30, 70))) // random chance

{

itemToCreateId = Pack3[Rnd.get(Pack3.length)];

amount = Rnd.get(1, 2);

}

break;

}

case 4: //fourth pack id

{

if(getChance(Rnd.get(30, 70))) // random chance

{

itemToCreateId = Pack4[Rnd.get(Pack4.length)];

amount = Rnd.get(1, 3);

}

break;

}

}

 

activeChar.getInventory().destroyItem("Extract", item, activeChar, null);

activeChar.getInventory().addItem("Extract", itemToCreateId, amount, activeChar, item);

 

SystemMessage sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);

sm.addItemName(itemToCreateId);

sm.addNumber(amount);

activeChar.sendPacket(sm);

 

ItemList playerUI = new ItemList(activeChar, false);

activeChar.sendPacket(playerUI);

}

 

private boolean getChance(int i)

{

return i > Rnd.get(100);

}

 

public int[] getItemIds()

{

return ITEM_IDS;

}

}

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

    • Not trusted person. He made me do a work while he promise we continue together yet he was already working with other developer cause my prices were high. He scammed me 10 Euro.    Work with him only if you want to scam him by selling him any shared FandC since he is greek and amateur who believe he will make career over L2
    • WTB H5 MID RATE COMPILED+SOURCE FILES,ONLY TRUSTED PEOPLES TEST SERVER IS A MUST PAYMENT: PAYPAL,REVOLUT,STRIPE,IRIS,CRYPTO
    • ⚡ 5TB Storage + Gemini Advanced 12-18M upgrade active! Keeps your personal files 100% private with instant automated setup.     FINAL CALL: Google is Shutting This Down After October 2026! Google will NEVER bring back this window of opportunity again. Once this month ends, this massive backdoor upgrade is gone permanently!  BUY 2, GET 1 FREE IS STILL LIVE! Stock up now for yourself, your family, your business, and your friends! Think about it: Every single person you know uses a Gmail account, and everyone is running out of storage. Don't let your loved ones get trapped paying $20–$30 every single month when you can set them up with 5TB Cloud Storage + Gemini Advanced (12–18 Months) right now for only $15! Why Buy Bulk Activations Today? Instant Gift Value: Perfect lifetime-style gift for clients, family, or team members. 100% Private & Safe: Activates on personal Gmails—zero passwords or logins required. Global Access: Works worldwide with zero VPN hassles. Instant Automated Delivery: Receive your activation links in seconds 24/7! ‍ Time is running out fast—secure your extra free licenses before the October deadline hits! Order Your Bundle Now on the Website
    • Since technical talk offends people, I believe I should return back to writting my Lineage 2 lore stories. Here's the next one:   Once upon a time, there was a boy and a small adorable wolf.    The boy really loved the wolf but as the wolf grow older and bigger, it became agressive and would bite the boy. One day the boy and the wolf decided to go to the city to buy potions. The road was long and hilly so the boy moved all his adena to the wolf bags to help his legs and reach the city easier.   When they reached the city, the boy tried to take the adena out of the wolf's bags. But the wolf would not ! He bit the boy and said "You will not get this adena back, this is my adena". The boy got angry. He decided to go to the pet master and ask for help.    "Pet master, pet master ! My wolf is big, bad and angry and it won't obey me. I want my adena back and it bites me. "   The pet master looked at the big angry wolf, then looked at the boy and said. "I have a solution for your problem young one. I have magic. Dark magic. I can turn your big bad elder wolf into a younger puppy for free, all you have to do is spell the magic chants. Nothing more, no wolf modifying wands, just your say".   The boy thought about it for a bit, and decided that he indeed wanted to turn things back. But when he was about to spell the magic words, guards arrived at the pet master.    The city guard captain said "Is this the big bad angry wolf that bites people and doesn't give back his adena ? We will kill this wolf !"    For a moment the boy hesitated but he said "This wolf is big bad and angry, but I love this wolf and I dont want it to die ! Please don't kill the big bad angry wolf." But the boy was not fast enough. The guards jumped the wolf and started slashing on him with their swords. The boy didn't know what to do, so in it its final moments right as the wolf was about to die, it spelled the magic words. "Pet master, make my wolf young and adorable again !"   But he was not fast enough. The wolf got slashed and killed by the guards just one moment before the boy could finish his last word.    But as the words came out of his mouth, with the wolf's dead body on the floor, a younger wolf manifested out of thin air. The magic was real. The guards got scared and run away. Now the boy was left with a dead old bad angry wolf and next to him an alive younger version.    The boys joy was even bigger when it opened the new wolfs bags and his adena was finally there. He took the adena and went back to buy potions in the city.   Twenty four hours later, the boy couldn't believe how his fortune would change ...   (No AI was used to write this story)
  • 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..