Jump to content

Question

Posted (edited)

Hi,

I am looking for help of how to remove quest from transform_teacher class so people do not need to make "More Than Meets the Eye" quest to learn subclass specification skills.
 

Edit: title addition and grammar fix

Edited by LineageLover

7 answers to this question

Recommended Posts

  • 0
Posted
2 hours ago, LineageLover said:

Hi,

I am looking for help of how to remove quest from transform_teacher class so people do not need to make "More Than Meets the Eye" quest to learn subclass specification skills.
 

Edit: title addition and grammar fix

 

Could you share with us your code?

  • 0
Posted (edited)
42 minutes ago, HugoBoss said:

 

Could you share with us your code?

Sure thing!

Here is ai.obj class https://pastebin.com/9wWF5eb2
Here is same .nasc class https://pastebin.com/2XDQhsLc

I am still pretty green at this and I am not sure whether it requires quest or item obtained from a quest in order to start learning skills from her(avant-garde)

edit:
long story short - I finished leveling up my subclass - got all the subclass certification skill books - went to learn skills and was asked to do a quest. Finished a quest - was able to learn. 

my goal is to remove this requirement to finish the quest and learn skills straight away

Edited by LineageLover
  • 0
Posted

set_compiler_opt base_event_type(@NTYPE_NPC_EVENT)

class transform_teacher : citizen {
parameter:
	int	quest_num = -1;
	int	flag_subjob_start = 10255;
	int	flag_subjob_end = 10266;
	int	fee_delete_subjob = 10000000;
	int	skill_acquire = 4;
	int	multisell = -1;
	int	skill_acquire2 = 5;
	int	skill_book_id1 = 0;
	int	skill_book_id15 = 0;
	int	skill_book_id16 = 10612;
	string	fnHi3 = "master_transformation008.htm";
	string	fnHi4 = "master_transformation008.htm";
	string	fnHi5 = "master_transformation007.htm";
	string	fnHi6 = "master_transformation009no.htm";
	string	fnHi7 = "master_transformation008no.htm";
	string	fnHi8 = "master_transformation010no.htm";

handler:
	EventHandler MENU_SELECTED(talker,ask,reply,i0,i1)
	{
		if( ask == -299 )
		{
			if( reply == 0 )
			{
				ShowEtcSkillList(talker, skill_acquire, "");
			}
			else if( reply == 1 )
			{
				if( multisell > -1 )
				{
					ShowMultisell(multisell, talker);
				}
			}
		}
		else if( ask == -282 )
		{
			if( reply == 0 )
			{
				i0 = 0;
				i1 = 0;
				if( talker.subjob_id != 0 )
				{
					ShowPage(talker, fnHi3);
					return;
				}
				for( i0 = skill_book_id1; i0 < skill_book_id15 + 1; ++i0 )
				{
					if( OwnItemCount(talker, i0) > 0 )
					{
						i1 = i1 + 1;
					}
				}
				if( OwnItemCount(talker, skill_book_id16) > 0 )
				{
					i1 = i1 + 1;
				}
				if( i1 == 0 )
				{
					ShowPage(talker, fnHi4);
					return;
				}
				if( GetOneTimeQuestFlag(talker, quest_num) == 0 )
				{
					ShowPage(talker, fnHi5);
					return;
				}
				ShowEtcSkillList(talker, skill_acquire2, "");
			}
			else if( reply == 1 )
			{
				i0 = 0;
				i1 = 0;
				if( talker.subjob_id != 0 )
				{
					ShowPage(talker, fnHi3);
					return;
				}
				if( OwnItemCount(talker, @adena) < fee_delete_subjob )
				{
					ShowPage(talker, fnHi7);
					return;
				}
				if( GetOneTimeQuestFlag(talker, quest_num) == 0 )
				{
					ShowPage(talker, fnHi5);
					return;
				}
				for( i0 = flag_subjob_start; i0 < flag_subjob_end + 1; ++i0 )
				{
					if( GetOneTimeQuestFlag(talker, i0) == 1 )
					{
						i1 = i1 + 1;
					}
				}
				if( i1 == 0 )
				{
					ShowPage(talker, fnHi8);
					return;
				}
				DeleteItem1(talker, @adena, fee_delete_subjob);
				for( i0 = skill_book_id1; i0 < skill_book_id15 + 1; ++i0 )
				{
					if( OwnItemCount(talker, i0) > 0 )
					{
						DeleteItem1(talker, i0, OwnItemCount(talker, i0));
					}
				}
				if( OwnItemCount(talker, skill_book_id16) > 0 )
				{
					DeleteItem1(talker, skill_book_id16, OwnItemCount(talker, skill_book_id16));
				}
				for( i0 = flag_subjob_start; i0 < flag_subjob_end + 1; ++i0 )
				{
					if( GetOneTimeQuestFlag(talker, i0) == 1 )
					{
						SetOneTimeQuestFlag(talker, i0, 0);
					}
				}
				DeleteAcquireSkills(talker, skill_acquire2);
				AddLogByNpc(899, talker, fee_delete_subjob, 0);
				ShowPage(talker, fnHi6);
			}
		}
	}

	EventHandler ONE_SKILL_SELECTED(talker,skill_name_id,need_quest,i0)
	{
		ShowGrowEtcSkillMessage(talker, skill_name_id, i0, "");
	}
}

 

Test it.

  • 0
Posted

Thank you for your help but I found a way to do it without editing Ai.obj.

As learning skills require 2 quests - subclass(id=235) and  More Than Meets the Eye(id=136) i changed {[quest_num]=136} to {[quest_num]=235} inside npcdata for master_transformation npc. 

 

I hope it makes sense.

 

Solved.

  • 0
Posted
33 minutes ago, LineageLover said:

Thank you for your help but I found a way to do it without editing Ai.obj.

As learning skills require 2 quests - subclass(id=235) and  More Than Meets the Eye(id=136) i changed {[quest_num]=136} to {[quest_num]=235} inside npcdata for master_transformation npc. 

 

I hope it makes sense.

 

Solved.

 

It does, and its also a clean solution to your problem.

 

I am glad that you could have been able to solve it!

  • 0
Posted
On 3/20/2020 at 9:09 PM, LineageLover said:

Thank you for your help but I found a way to do it without editing Ai.obj.

As learning skills require 2 quests - subclass(id=235) and  More Than Meets the Eye(id=136) i changed {[quest_num]=136} to {[quest_num]=235} inside npcdata for master_transformation npc. 

 

I hope it makes sense.

 

Solved.

Topic lock request.

Guest
This topic is now closed to further replies.


  • Posts

    • I have a highly customized Hi5 pack based on L2JMobius with a lot of features for performance and modern game design. Disclaimer: I do not run any public server, but I run a "private" server for a group of 10 friends and about 2000 AI bots that required me to do heavy modifications on core systems of the game.  So my opinion will obivously be biased towards L2JMobius.   What I can tell you though without bias is: Most of the features you are asking for are nowadays considered de-facto, don't pay money for them. TvT, offline mode, community boards, premiums, vote rewards are in most packs including the open source ones. So before you pay a thousand plus euro for a pack ask yourself what you are paying that money for, that open source packs don't have.   Also a lot of the "strong points" some old packs were made for are nowadays obsolete. L2JFree derived packs for example used to have a lot of GC optimizations (Trove library) which are not not maintained, but most importantly not needed cause Java has evolved a lot since then and the performance issues these tricks tried to solve back then, are currently solved by Java's JVM itself. So if someone tries to sell you packed / unpacked integers in special hashmap data structures and other such things know that they have really lost their value nowadays.    A lot of people are selling thin air, things that everyone has. "Quality geodata" being one of them. I mean what's "quality geodata" ? Has someone painted them by hand ? Hell there's an online tool for free in github that extracts quality geodata, I think Galagard made it ? In contrast I'll tell you without wanting to boast about it that I use 3D navmesh on my project because 2000 bots could not pathfind large distances on A* on geodata. As far as I know, L2JMobius has it in its subscription version too. So if I could do an acceptable transition to navmesh from geodata in a week alone, I would assume that a decent pack with dedicated developers could do it better and faster. Red flag if someone still tries to sell you geodata in 2026.   Multi-protocol support gives small value and is a high risk.   I would not go for multi-protocol support for a public server cause you are locking yourself to specific providers and the functionality they support. If you need to change (eg pricing issues), you will be locked to a handful of providers. And what are you really gaining from a new client on an old game version ? Better UI ? The engine is still the same, static targeting and menus.    Agentic AI will make old hard features easy to implement, and drop their money value. Pay for AI-proof value. And compared to what most insecure devs claim, its a very powerful tool that allows those who know how to use it to accelerate their development. So a lot of features that took in the past a lot of time and effort to be developed and were a reason to charge money, are becoming a commodity today. So think to: The thing I am paying money for right now, how easy will it be to implement in a year from now ? If for example you are paying money for a game launcher that Claude Code can generate in top 1 hour without issues, I think you are wasting money.    I want to emphasise this a lot. Software engineering is in a transition atm. Most things that were mediocre to implement, launchers, guards, CMS, are nowadays easy. Yet the dev community continues to market them as premium content. They are not, sooner or later, when everyone starts selling them, they will realize that they will have to offer value in more complex features.  Private or public ? Bottom line is that a private pack and 1000 euro wont get you a sucessful server. You're the one that make it or break it. There have been many sucessful servers both in private packs and public packs in the past. It's really on the hands of the beholder, not on the source. A pack that plays good is a good indicator to buy as Trance said, but I would disagree that it's not enough. A server owner is not a player. He's a business man and has to account for longevity, vendor lock-in, expandability, hidden costs,  amortization, price changes and many more. Don't pick a pack based on how it played only.    
  • 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..