Jump to content
  • 0

Creating Custom Npc


Sinister Smile

Question

Hi all, i want to create a custom npc, that can give passive skills to the players. For example: 
Buy Skill 1

Buy Skill 2

Buy Skill 3

Buy Skill 4
.......
skill cost: 100 adena
check's: to can take only 3 skills MAX.
 
Someone can suggest me how to create a npc like this?
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Well 

  • create your instance.
  • in every button use 1 specific bypass example the first button named Wind Walk should have bypass bypass -h npc_%objectId%_buy 1204 2
  • 1204 ID / 2 = lvl
  • Your bypass "buy" should check if any skill contains these infos
  • then you should check the player's skills and count all your custom buffs 
  • if the count is lower than the maximum amount continue and give the buff. Lets see that
<button value="Wind Walk" action="bypass -h npc_%objectId%_Buy 1204 2" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td></p>

Your instance bypass:

else if (currentCommand.startsWith("buy"))
{
	if (st.countTokens() != 2)
		return;
	
	String id = st.nextToken(); // get the id
	String level = st.nextToken(); // get the level
	int idval;
	int lvl;
	try
	{
		idval = Integer.parseInt(id); // trying to parse them
		lvl = Integer.parseInt(level);
	}
	catch (NumberFormatException e)
	{
		System.out.println(e.getMessage());
		return;
	}
	int found = 0;
	for (L2Effect f : player.getAllEffects())
	{
		if (f.getSkill().getId() == 1 || f.getSkill().getId() == 2 || .....)
		{
			found++;
			if (found > 3)
			{
				player.sendMessage("You have reached the maximum ammount of buffs");
				return;
			}
		}
		
	}
	L2Skill skill = SkillTable.getInstance().getInfo(idval, lvl);
	if (skill != null)
		if (!player.destroyItemByItemId("buySkill", 57, 500, null, true)) // check for items
			player.sendMessage("You do not have enough adena!");
		else
			player.addSkill(skill, true); // store skill . (false for not store)
}

note: if you have many skills for sell its better to use a list and then check with contains to avoid this 'for' loop

Edited by melron
Link to comment
Share on other sites

  • 0

Well 

  • create your instance.
  • in every button use 1 specific bypass example the first button named Wind Walk should have bypass bypass -h npc_%objectId%_buy 1204 2
  • 1204 ID / 2 = lvl
  • Your bypass "buy" should check if any skill contains these infos
  • then you should check the player's skills and count all your custom buffs 
  • if the count is lower than the maximum amount continue and give the buff. Lets see that
<button value="Wind Walk" action="bypass -h npc_%objectId%_Buy 1204 2" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td></p>

Your instance bypass:

else if (currentCommand.startsWith("buy"))
{
	if (st.countTokens() != 2)
		return;
	
	String id = st.nextToken(); // get the id
	String level = st.nextToken(); // get the level
	int idval;
	int lvl;
	try
	{
		idval = Integer.parseInt(id); // trying to parse them
		lvl = Integer.parseInt(level);
	}
	catch (NumberFormatException e)
	{
		System.out.println(e.getMessage());
		return;
	}
	int found = 0;
	for (L2Effect f : player.getAllEffects())
	{
		if (f.getSkill().getId() == 1 || f.getSkill().getId() == 2 || .....)
		{
			found++;
			if (found > 3)
			{
				player.sendMessage("You have reached the maximum ammount of buffs");
				return;
			}
		}
		
	}
	L2Skill skill = SkillTable.getInstance().getInfo(idval, lvl);
	if (skill != null)
		if (!player.destroyItemByItemId("buySkill", 57, 500, null, true)) // check for items
			player.sendMessage("You do not have enough adena!");
		else
			player.addSkill(skill, true); // store skill . (false for not store)
}

note: if you have many skills for sell its better to use a list and then check with contains to avoid this 'for' loop

thank for the info i will try to make it ;d

Link to comment
Share on other sites

  • 0

what this st.countToken() ?

The countTokens() method is used to calculate the number of times that this tokenizer's nextToken method can be called before it generates an exception.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...